有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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参数:

  1. -Dtrust_all_cert=true没有效果
  2. -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8888没有效果

在第2步中,我们尝试将Fiddler作为代理,但在执行HTTPS请求时,不会出现任何请求

如果我们设置-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888并执行HTTP请求,我们可以在Fiddler中看到流量。所以

  1. 为什么不相信所有人的帮助
  2. 为什么Java不使用我们指定的https代理

注意:我们甚至尝试制作一个java程序,使用localhost:8888作为代理。同样,它适用于HTTP,但不适用于HTTPS


共 (1) 个答案

  1. # 1 楼答案

    一种方法是创建一个新的cacerts文件并在JVM中使用它:

    1. 下载CA根证书(例如Root.cer)
    2. keytool -import -noprompt -trustcacerts -alias root -file root.cer -keystore .\cacertsnew -storepass ***
    3. java -Dhttps.proxyHost=someproxy -Dhttps.proxyPort=8080 -Djavax.net.ssl.trustStore=cacertsnew ...