java - 初始化默认 SSL 上下文失败

标签 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)

最佳答案

这不是你的错。使用另一个 JVM,这将解决您的问题。我有同样的问题。我在 Gumstix/linux/jamVM 上运行 Apache HttpClient。我得到了完全相同的异常(exception)。这是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);
    }
}

参见 gnu.javax.net.ssl.provider.X509KeyManagerFactory.java 第 108 行的源代码。这就是异常的来源。 (因为 'current' 是一个 key 管理器,它是空的。你从之前的测试中知道这一点。)

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

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

关于java - 初始化默认 SSL 上下文失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063882/

相关文章:

java - 如何修复 "JRException: Error compiling report java source files"错误?

c# - 设置 SSL 与使用 DLL 进行身份验证登录

java - 需要一本书来逐步学习使用Servlet/jsp|JSTL|EL等进行MVC购物车开发

linux - 为什么在 Grepping 文件 (.gz) 时,字数统计(即 -wc)中有很多零

linux - 包 'docker.io' 没有安装候选

linux - 有没有办法确定 Linux 中可用视频 RAM 的数量?

ssl - 我应该在 SSL 证书请求的通用名称中包含 'www' 吗?

php - Laravel 5 Socialite - cURL 错误 77 : error setting certificate verify locations

java - Tomcat8:404 错误,尽管 webapp 文件夹存在(dspace 实例)

java - 使用 Maven 为每个环境定制 context.xml