2012-09-19 41 views
1

大多数支持SSL的Web浏览器都有一个CA列表,这些CA的证书将自动接受。如果浏览器遇到其授权CA位于列表中的证书,浏览器将自动接受该证书,并建立到该站点的SSL连接。Java应用程序如何无缝接受服务器证书?

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

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

回答

1

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

  1. LDAP服务器部署一些CA(不 的一个已知的)签署的证书。
  2. LDAP服务器部署了自签名证书

对于情况(1)所有你需要做的就是签名者证书添加到您的信任(即签署了issure证书您的LDAP服务器的证书)。如果LDAP服务器更改了证书,那么只要它从您现在已经设置为可信的相同CA获得证书,就不会受到影响。可以在cacerts中添加此可信证书,但建议的解决方案是使用您自己的单独信任库,将其导入并将其设置在JVM中以覆盖默认的cacerts。 Google中有很多例子。

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

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

+0

LDAP证书由知名CA签署。证书因过期而更改。我认为解决方案将是案例1的建议,对吗? “...将签名者的证书添加到您的信任库...”这是否也被称为“根证书”? –

+0

@WillL:你可以看到这个着名的CA是否已经包含在java的默认信任库中。如果是的话,你应该可以。如果不是,那么我建议你不要导入它,而是配置一个信任库该CA的证书 – Cratylus

+0

Cratylus,实际上它是一个新的证书。在java中,我可以建立到LDAP的安全连接,并且Java客户端会接受并保存证书,而无需手动更新客户端上的证书?这是否过于雄心勃勃? -thx –

相关问题