我正在用Java编写一个相当简单的客户端应用程序,它使用Apache HttpComponents向服务器发送少量HTTP请求并处理其响应。我仍然无法连接到SSL服务器,因为我可以访问的所有测试服务器都使用由我们的公司根证书(由AD域控制器分发)签名的证书,并且默认情况下不会信任此根证书。
我在过去几天做了相当多的谷歌搜索,但没有找到适合我的解决方案。我发现的所有解决方案(其中大部分都在这里 - 在Stack Overflow上)都将归结为两条路径:
1。完全禁用证书信任。 嗯,这可能适用于测试,但我希望在应用程序的发布版本中启用信任检查,因此我也必须对其进行测试。
2。使用keytool将自签名证书添加到Java证书库。 这对于测试来说很容易,但对于发布版本则不行。在我的环境中,我知道我需要信任/添加哪个证书,但是应用程序的潜在用户将不在我的环境中,因此他们将拥有自己的不同证书集。
以上是我上面提到的解决方案的一些链接(还有更多的链接,但它们都归结为相同的2个解决方案):
我想要(理想情况下)是从服务器对Windows证书存储接收Java代码检查证书,并且只要Windows可以信任它(如果有多平台解决方案 - 甚至更好)。或者,从Windows证书存储中导出所有受信任的根证书颁发机构,并将其导入Java信任存储。一般的想法是,如果用户的机器信任它,则信任服务器证书,无论它是什么类型的证书(自签名,商业,公司AD证书等)。
有没有办法实现这个目标?谢谢!