大多数支持SSL的Web浏览器都有一个CA列表,这些CA的证书会自动接受。如果浏览器遇到授权CA在列表中的证书,浏览器将自动接受证书,并建立与站点的SSL连接。
在JBoss 7上运行Java 1.6客户端,需要与LDAP服务器建立SSL连接。由于客户端正在生产,如果LDAP服务器更新其证书而不通知我在JBoss上相应地更新证书,则客户端将失败。我的问题是:如何以与浏览器“无缝接受”证书类似的方式安全地连接(ssl)到LDAP?
我不知道这在Java中是否可行。但是,任何想法和反馈都是受欢迎的。
答案 0 :(得分:1)
Java有一个包含所有可信证书的默认信任库。这是在%JRE_HOME%\lib\security\cacert
下,并且拥有所有可信的CA证书(Verisign等)
因此,如果您的客户端https
应用程序尝试连接到部署由这些颁发者签名的证书的服务器,则不会出现任何问题(与浏览器相同)。
现在你的问题。您没有提及有关LDAP
服务器的足够信息
我能想到以下几点:
对于案例(1),您需要做的就是将签名者的证书添加到您的信任库(即签署LDAP服务器证书的证书的证书)。如果LDAP服务器更改了证书,则您将不受影响,前提是它从您现在设置为受信任的CA获取证书。可以在cacerts
中添加此可信证书,但建议的解决方案是使用您自己的单独信任库,导入它并在JVM中设置它以覆盖默认的cacerts
。 Google中有很多例子。
对于情况(2),这是一个非常糟糕的设置并且遇到麻烦,因为每次LDAP
服务器更改证书时您都需要手动更新信任库。
但无论如何我只能假设证书因到期而改变了?我想不出另一个原因(除了私钥的妥协,但这不是你的描述中的问题)