java - SSL 证书升级导致问题

标签 java ssl httpclient ssl-certificate

我们正在与远程服务器对话以对用户进行身份验证。 Web 服务器使用由 Verisign 签名的 SSL 证书。数据通过 HTTPS 进行交换,我们已将 ThreadSafeClientConnManager 配置为使用 JVM 默认 SSL 工厂:

SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory
                .getSocketFactory(), 443));
ClientConnectionManager manager = new ThreadSafeClientConnManager(
                sDefaultHttpParams, schemeRegistry);

最近,网络服务器更新了他们的 SSL 证书,这导致我们的应用程序中断。我们可以做些什么来避免这个问题?

请帮忙。

最佳答案

没有什么可以真正“避免”这个问题,因为它不是真正的问题,它是 SSL 证书和权威信任的核心“特征”。

这是一个相当宽泛的问题,更多的细节可以帮助查明确切的问题,但这里是要检查的前两件事。

  1. 他们使用哪个 CA 升级了他们的 SSL 证书?是自签名的吗?
    如果该站点已升级为使用使用非标准根证书颁发机构的 SSL 证书,那么您需要使用 keytool 导入特定的 SSL 证书,以告知本地 JVM 该证书是可信的。如果他们使用新的授权机构(并且您的组织信任该根授权机构),那么您可能需要导入新的根证书授权机构,默认情况下支持大多数专业,但有时我被迫导入新的。

http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html

  1. 确保他们的证书链接正确。我见过的第二个最常见的问题是站点管理员的证书链接(安装)。不幸的是,IE/Mozilla/Java...都使用不同的验证机制来确保 SSL 证书是“有效的”,而且我发现许多网站管理员不知道如何正确地将证书链接到他们网站上适当的根权限。您应该在浏览器中打开证书(我会在多个浏览器中打开它)并检查信任链以确保证书链从站点一直备份到预期的根 CA。 (这也是您检查 #1 的根 CA 的方法)。如果它没有信任链,那么 JVM SSL 验证将失败(而我已经看到 Internet Explorer 在旧版本的 IE 中将非链式证书称为“有效”)。

关于java - SSL 证书升级导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466540/

相关文章:

java - 从不同的第三库中排除 slf4j

windows - SSL 证书不适用于 Safari

ssl - 如何从 SSL 上下文中加载的证书中取回证书详细信息?

java - 为什么分配的java变量表现得像一个引用?

java - 使用 java.util.concurrent.executors

java - Spring Boot - 未找到所需的 bean - 但接口(interface)是在同一个类中定义的

java - 由于缺少证书,无法从 Java 访问 blockchain.info

Android httpclient 登录并使用 cookie 进行进一步处理

java - 使用 HttpClient 发送带有 HTTP POST 请求的 XML 有效负载--Java

java - HttpClient 发送请求,不等待响应