初始化默认SSL上下文失败

luj*_*sun 1 java linux ssl https httpclient

我的httpclient项目遇到了一个奇怪的问题.在java1.6的其他两个Centos系统中运行成功.但它在另一台机器上失败了(centos和java1.6).问题是:

java.lang.IllegalStateException: Failure initializing default SSL context
     [java]    at org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:211)
     [java]    at org.apache.http.conn.ssl.SSLSocketFactory.(SSLSocketFactory.java:333)
     [java]    at org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:165)
     [java]    at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:45)
     [java]    at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:294)
     [java]    at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:445)
     [java]    at simulativeLogin.WebClientDevWrapper.wrapClient(Unknown Source)
     [java]    at simulativeLogin.GetAccessToken.getToken(Unknown Source)
     [java]    at crawler.FriendshipCrawler.main(Unknown Source)
     [java]    at java.lang.reflect.Method.invoke(libgcj.so.10)
     [java]    at org.apache.tools.ant.taskdefs.ExecuteJava.run(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.taskdefs.Java.run(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.taskdefs.Java.executeJava(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.taskdefs.Java.executeJava(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.taskdefs.Java.execute(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.UnknownElement.execute(ant-1.7.1.jar.so)
     [java]    at java.lang.reflect.Method.invoke(libgcj.so.10)
     [java]    at org.apache.tools.ant.dispatch.DispatchUtils.execute(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Task.perform(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Target.execute(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Target.performTasks(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Project.executeSortedTargets(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Project.executeTarget(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Project.executeTargets(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Main.runBuild(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.Main.startAnt(ant-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.launch.Launcher.run(ant-launcher-1.7.1.jar.so)
     [java]    at org.apache.tools.ant.launch.Launcher.main(ant-launcher-1.7.1.jar.so)
     [java] Caused by: java.lang.IllegalStateException
     [java]    at gnu.javax.net.ssl.provider.X509KeyManagerFactory.engineGetKeyManagers(libgcj.so.10)
     [java]    at javax.net.ssl.KeyManagerFactory.getKeyManagers(libgcj.so.10)
     [java]    at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:187)
     [java]    at org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:209)

lqu*_*lqu 5

这不是你的错.使用另一个JVM来解决您的问题.我有同样的问题.我在Gumstix/linux/jamVM上运行Apache HttpClient.我得到了完全相同的例外.这是X509的测试程序.我在我的Mac mini上运行它,结果是"SunX509"作为算法; 但是在jamVM上,它是'null'.试试吧.

public class TestX509 {
    public static void main(String[] args) {
        String algorithm = Security
            .getProperty("ssl.KeyManagerFactory.algorithm");

        System.out.println("algorithm is " + algorithm);
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅gnu.javax.net.ssl.provider.X509KeyManagerFactory.java的第108行的源代码.这是异常的来源.(因为'current'是一个密钥管理器,它是null.你知道从之前的测试中得到的.)

104:   protected KeyManager[] engineGetKeyManagers()
105:   {
106:     if (current == null)
107:       {
108:         throw new IllegalStateException();
109:       }
110:     return new KeyManager[] { current };
111:   }
112:
Run Code Online (Sandbox Code Playgroud)

由于库抛出了IllegalStateException,这是一个RuntimeException,有人认为它是GCJ的一个bug,并在此处报告了http://code.google.com/p/selenium/issues/detail?id=2483.