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

时间:2012-09-19 19:09:04

标签: java ssl ssl-certificate ldapconnection

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. LDAP服务器部署由某个CA(不是其中一个)签名的证书 已知的)。
  2. LDAP服务器部署自签名证书
  3. 对于案例(1),您需要做的就是将签名者的证书添加到您的信任库(即签署LDAP服务器证书的证书的证书)。如果LDAP服务器更改了证书,则您将不受影响,前提是它从您现在设置为受信任的CA获取证书。可以在cacerts中添加此可信证书,但建议的解决方案是使用您自己的单独信任库,导入它并在JVM中设置它以覆盖默认的cacerts。 Google中有很多例子。

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

    但无论如何我只能假设证书因到期而改变了?我想不出另一个原因(除了私钥的妥协,但这不是你的描述中的问题)