我生成了自签名certifiacte,用它来验证我的网络应用程序。客户端而不是Web浏览器使用客户端应用程序与Web服务器通信。客户端应用程序使用httpclient。互联网上充满了如何信任httpclient中所有ssl证书的例子。我不想信任所有证书,我只想信任一个,我的自签名证书(当然每个CA可信证书也)。我知道我可以使用keytool将我的证书添加到受信任的密钥库,但我不想在JSSE密钥库中进行接口。我想说httpclient要信任一个特定的自签名证书。
第一个问题:
有可能吗?
第二个问题:
在开发环境中描述的解决方案是可以的。我认为这是不好的做法,但我想知道它在生产环境中是否可以接受?
答案 0 :(得分:1)
有可能吗?
当然,确实如此。您可能需要做更多的工作来管理您的信任材料并初始化您的应用程序的SSL上下文。您可以选择仅信任一个证书,也可以选择使用JRE附带的信任材料,然后有选择地添加特定于您的应用程序的信任材料。
您可以使用Apache HttpClient 4.3
中的SSLContextBuilder来简化信任和密钥材料管理和初始化的过程
在生产环境中是否可以接受?
这在很大程度上取决于应用程序的安全上下文和要求。仅信任一个特定证书而不信任任何标准CA可能会使您的应用程序不太容易受到中间人攻击的影响,但每次有问题的证书到期或被撤销时都需要重新配置和可能的重新部署。确保私钥不会落入坏人手中也是您的责任。它是利弊的结合。