我使用SSL在用Java编写的两个组件之间进行通信。我不能使用CA,所以我必须自我签名。不幸的是,这意味着当我尝试握手时,我得到一个SunCertPathBuilderException。我可以创建我自己的X509TrustManager,它只信任所有东西,但这种方式违背了签署证书的目的。
我想在第一次建立连接时,提示用户“使用无效证书进行SSL握手。将证书添加到商店?”或类似的东西,所以他们可以将它添加到他们的证书商店,就像网络浏览器在无效证书的网站上做。我可以在网上找到很多通过命令行向商店添加证书的例子,但我无法弄清楚如何以编程方式进行。有没有办法做到这一点?
答案 0 :(得分:5)
是的,这是可能的。
我之前使用过一些代码here。我不得不修改它来做我想做的事情,我怀疑你也会这样做但是这应该让你接近 - 你不是想要导入一个键,所以理论上你应该能够简化一些事情。无论如何,你可以了解你需要什么。
java.security.KeyStore的JDK JavaDoc也很有用。
答案 1 :(得分:0)
为什么不创建自己的CA并使用它来签署证书?然后,您需要做的就是在计算机上安装CA自己的证书,并且该CA签署的每个证书都将验证。
答案 2 :(得分:0)
为什么你需要这样做,你没有验证客户端是谁,他们说你只是使用证书加密通信,所以你需要的是一个允许所有证书的自定义信任管理器。 你可能会问的是,从内存中还有一个自定义信任管理器来验证证书并将它们存储在密钥库中。我不记得细节,但至少你知道可以做到这一点。