java - Java 应用程序如何无缝地接受服务器证书?

标签 java ssl ssl-certificate ldapconnection

大多数支持 SSL 的 Web 浏览器都有一个 CA 列表,它们将自动接受其证书。如果浏览器遇到授权 CA 在列表中的证书,浏览器将自动接受该证书,并与站点建立 SSL 连接。

有一个运行在 JBoss 7 上的 Java 1.6 客户端,它需要与 LDAP 服务器建立 SSL 连接。由于客户端在生产中,如果 LDAP 服务器更新其证书而没有通知我在 JBoss 上相应地更新证书,客户端将失败。我的问题是:我如何才能以浏览器无缝“接受”证书的类似方式安全地连接 (ssl) 到 LDAP?

我不知道这在Java中是否可行。但是,欢迎任何想法和反馈。

最佳答案

Java 有一个默认的信任库,其中包含所有受信任的证书。它位于 %JRE_HOME%\lib\security\cacert 下,拥有所有受信任的 CA 证书(Verisign 等)。
因此,如果您的客户端 https 应用程序尝试连接到部署了由这些颁发者签名的证书的服务器,您将不会遇到任何问题(与您的浏览器发生的情况相同)。
现在解决你的问题。您没有提及有关您的 LDAP 服务器的足够信息。
我可以想到以下几点:

  1. LDAP 服务器部署了由某个 CA(不是其中之一)签名的证书 已知的)。
  2. LDAP 服务器部署自签名证书

对于情况 (1),您需要做的就是将签名者的证书 添加到您的信任库(即签署您的 LDAP 服务器证书的问题的证书)。如果 LDAP 服务器更改证书,您将不受影响,前提是它从您现在设置为受信任的同一 CA 获取证书。这个受信任的证书可以添加到 cacerts 中,但推荐的解决方案是使用您自己的单独信任库,导入它并在 JVM 中设置它以覆盖默认的 cacerts。谷歌有很多例子。

对于情况 (2),这是一个非常糟糕的设置并且有麻烦,因为每次 LDAP 服务器更改证书时您都需要手动更新信任库。

但无论如何我只能假设证书因过期而发生变化?我想不出其他原因(除了私钥的妥协,但这不是你描述的问题)

关于java - Java 应用程序如何无缝地接受服务器证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501286/

相关文章:

java - 什么样的List<?>会自动剔除重复项

ssl - 我可以在主域和子域中放置通配符安全印章吗

apache - 如何在 Amazon Web Services/Apache 上更新 SSL 证书

google-chrome - Cookie 不再为 Google Chrome 中的不安全站点保存

ios - 为 iOS 推送通知导入 SSL 证书会阻止其他开发人员处理该项目吗?

java - 边框布局间距/边距

java - 从 bukkit 配置文件中的 List<String> Map 调用特定字符串时出错

java - 动态加权随机化

java - android 上的 libcurl CURLE_SSL_CACERT_BADFILE 错误

与 Apache Activemq 的 SSL 连接