Java PKIX/验证程序的https SSL问题。尽管存在代理,但验证程序异常
我们所处的场景是,公司代理解密所有HTTPS流量,并使用Java不信任的CA根对其重新签名
我们还处于无法修改Java目录中的cacerts文件的场景中
我们在许多Java应用程序中遇到以下问题:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
我们不想添加单独的证书
但是,我们可以做的是更改JVM参数:
-Dtrust_all_cert=true
没有效果-Dhttps.proxyHost=localhost -Dhttps.proxyPort=8888
没有效果
在第2步中,我们尝试将Fiddler作为代理,但在执行HTTPS请求时,不会出现任何请求
如果我们设置-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888
并执行HTTP请求,我们可以在Fiddler中看到流量。所以
- 为什么不相信所有人的帮助李>
- 为什么Java不使用我们指定的https代理李>
注意:我们甚至尝试制作一个java程序,使用localhost:8888作为代理。同样,它适用于HTTP,但不适用于HTTPS
# 1 楼答案
一种方法是创建一个新的cacerts文件并在JVM中使用它:
keytool -import -noprompt -trustcacerts -alias root -file root.cer -keystore .\cacertsnew -storepass ***
java -Dhttps.proxyHost=someproxy -Dhttps.proxyPort=8080 -Djavax.net.ssl.trustStore=cacertsnew ...