我正在编写一个Java代理,它使用SSL与其他服务器通信。 使用ServerSocketFactory以及使用服务器证书填充的密钥库和信任库都可以很好地工作。
我想知道,Java 7中有没有办法禁用认证并信任所有服务器? (是的,我知道这有风险 - 代理仅供内部使用)
我已经看到了使用X509TrustManager实现实现TrustManager的一些示例,尽管显然Java 7不支持这些契约,并且X509TrustManager本身已被弃用。
感谢您在Java 7上的建议和任何代码示例。
答案 0 :(得分:1)
MITM代理服务器(即能够查看SSL / TLS流量的服务器)通常使用自己的CA为请求的站点生成虚假证书。
在客户的信任库中安装此CA证书,而不是调整代码。这是一个更清洁的解决方案,从长远来看,它更容易部署。
(为了更直接地回答您的问题,无数信任管理器的例子在Java 7中仍然可以正常工作。)
答案 1 :(得分:0)
我所做的是使用本文中提到的代码实现java.security.Provider
https://code.google.com/p/misc-utils/wiki/JavaHttpsUrl
注意:这是第二个提供的解决方案。
这篇文章没有提到您还应该按顺序添加密钥库以使工作正常。 因此,也应该设置这些VM参数(除非你得到“没有共同的密码套件”的错误信息):
-Djavax.net.ssl.keyStore=KEYSTORE LOCATION
-Djavax.net.ssl.keyStorePassword=YOUR PASS
我希望这会对你有所帮助,因为在我所看到的所有地方都没有提到这部分。