以编程方式在Java中添加受信任的证书

我使用SSL在用Java编写的两个组件之间进行通信。 我不能使用CA,所以我必须自我签名。 不幸的是,这意味着当我尝试握手时,我得到一个SunCertPathBuilderException。 我可以创建我自己的X509TrustManager,它只信任所有东西,但这种方式违背了签署证书的目的。

我想,在第一次建立连接时,提示用户“使用无效证书进行SSL握手。将证书添加到商店?” 或者某些东西,所以他们可以将它们添加到他们的证书商店,就像Web浏览器在具有无效证书的站点那样。 我可以在网上找到很多通过命令行向商店添加证书的例子,但我无法弄清楚如何以编程方式进行。 有没有办法做到这一点?

对的,这是可能的。

这里有一些我以前用过的代码。 我不得不修改它来做我想做的事情,我怀疑你也会这样做但是这应该让你接近 – 你不是想要导入一个键,所以理论上你应该能够简化一些事情。 无论如何,您可以了解您需要什么。

用于java.security.KeyStore的JDK JavaDoc也非常有用。

为什么不创建自己的CA并使用它来签署证书? 然后,您需要做的就是在计算机上安装CA自己的证书,并且该CA签署的每个证书都将validation。

为什么你需要这样做,你没有validation客户端是谁,他们说你只是使用证书来加密通信,所以你需要的是一个允许所有证书的自定义信任管理器。 你可能会问的是,从内存中还有一个自定义信任管理器来validation证书并将它们存储在密钥库中。 我不记得细节,但至少你知道有可能做到这一点。