尽管有代理,但Java PKIX / validator.ValidatorException的SSL问题

时间:2017-09-25 14:03:04

标签: java https jvm http-proxy

我们遇到的情况是公司代理正在解密所有HTTPS流量并使用Java不信任的CA ROOT重新签名。

我们也处于无法修改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无效
  3. 在第2步中,我们尝试通过Fiddler作为代理,但在我们执行HTTPS请求时不会出现请求。

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

    1. 为什么trust_all_cert不在这里帮忙?
    2. 为什么Java不使用我们指定的https代理?
    3. 注意:我们甚至尝试将一个java程序硬连线使用localhost:8888作为代理。同样,适用于HTTP但不适用于HTTPS。

1 个答案:

答案 0 :(得分:0)

一种方法是创建一个新的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 ...