统一代理日志中出现以下错误消息

1
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

原因

这是Java虚拟机报告的常见错误消息。当Java环境没有适当的CA证书路径来验证HTTPS服务器是否为有效网站时,就会发生这种情况。这是一个特定于Java的错误,其他技术不会报告此类错误。

解决方案

创建证书

首先,你需要创建一个证书。要执行此操作,请按照以下步骤操作:

  • 确保文件格式为:Base64编码ASCII、单个证书(*.pem, *.crt)

  • 将文件命名为:(Windows:“xxx.crt”;Mac OS:“xxx.cer”)

将证书添加到密钥库

注意:

1
JAVA和/或JDK的位置可能因初始安装位置而异。如果已安装JDK,则JAVA_HOME变量设置为jdk目录,而不是jre。请使用运行“java”命令时访问的相同Java版本。
  • 导出证书文件后,打开CMD。

  • 切到{jre目录}/lib/security目录。确保这是运行“java”命令时访问的相同版本的Java,否则证书将无法识别。例如:D:\JDK\jdk1.8.0_202\jre\lib\security

  • 确保cacerts密钥库文件位于此目录中。例如:D:\JDK\jdk1.8.0_202\jre\lib\security\cacerts

执行以下命令将证书导入cacerts密钥库:

对于Windows:

keytool -import -noprompt -trustcacerts -alias https://xxx -file "D:\xxx.crt" -keystore cacerts

对于Mac OS:

keytool -import -noprompt -trustcacerts -alias https://xxx -file "D:\xxx.cer" keystore cacerts

注意:

1
2
3
你将被提示提供cacerts密钥库密码,默认密码为'changeit'

如果系统找不到keytool命令,则可能需要使用JDK版本,并且已将JDK二进制路径添加到PATH环境变量中。