由于某些“众所周知”的原因,Azure中国版使用了国内的WoSign证书——和臭名昭著的CNNIC有的一拼。Apple是不信任WoSign证书的,这也是为什么用Mac OS中访问www.azure.cn时提示证书不被信任的原因。同样,JDK也不待见这货,这就导致在用Java调用Azure中国版API的时候会报“PKIX path building failed”错误。
由于JDK并不使用Windows操作系统的证书存储,因此虽然Windows是信任WoSign的,但依然需要手工添加WoSign根证书到JDK的可信任证书存储中。
到http://www。wosign。com/Root/index.htm下载WoSign根证书(这个域名竟然是cnblogs的违禁词...)。
添加WoSign根证书到JDK:
keytool -keystore C:Java8jdk1.8.0_92jrelibsecuritycacerts -importcert -alias WoSign -file C:UsershunteDeskto pWS_CA1_NEW.cer
命令格式:
keytool -keystore [JAVA_HOME目录]jrelibsecuritycacerts -importcert -alias WoSign -file [WoSign根证书文件位置]
看到类似以下的提示,则表示根证书添加成功。
如果出现错误,检查一下本机的PATH环境变量中是否包含“%JAVA_HOME%in”。另外,JDK和JRE安装时尽量不要安装到“Program Files”目录,这个目录中的空格经常会引起一些莫名其妙的麻烦。
根证书添加成功后,在需要调用Azure中国版API的Java代码之前加入一行:
System.setProperty("javax.net.ssl.trustStore","C:\Java8\jdk1.8.0_92\jre\lib\security\cacerts");
这里注意第二个参数要和前文中添加根证书时写的证书存储位置保持一致,在Windows环境中目录分隔的反斜线要转义(\)。
经过上述步骤后,在Java中调用Azure中国版的API就可以正常工作了。