问题: JAVA 在调用 Azure 的 HTTPS 的 REST API 时,会经常报证书问题。错误如下:
PKIX:unable to find valid certification path to requested target
原因: JDK 有一套单独的证书库,Java 在访问 HTTPS 服务时,会使用自己的证书仓库中的信任根证书,对 HTTPS 的证书,进行校验是否可信。如果服务提供方的根证书不在 JDK 可信证书库中,就会报该证书不存在。而 Azure 使用 Wosign 根证书,默认是不包含在 JDK 的证书库中。所以就会出现该问题。
解决方法:安装 Wosign 根证书到 JDK 的证书库,详细步骤如下:
- 从 http://www.wosign.com/Root/index.htm# 站点 下载 WoSign 根证书(Certification Authority of WoSign),将 .crt 文件后缀改为 .cer
- 执行以下命令导入
接下来 会提示输入密码,默认密码为 changeit,输入之后,选择‘是’将其安装到 JDK 可信证书库中。keytool -keystore "C:\Program Files\Java\jdk1.8.0_71\jre\lib\security\cacerts" -importcert -alias WoSign -file WS_CA1_NEW.cer
- 如果看到以下结果,则导入成功。
- 注意:打开CMD时候请以管理员身份打开。