API服务器使用自生成的SSL证书时,通常的做法是在Java客户端程序里信任所有证书。但这样做无法避免中间人攻击。若调用方也为服务器时,更安全的做法是在调用方导入HTTPS证书。下面介绍如何在JDK中导入CA证书。
导入CA根证书
需注意待导入的证书的CN(Common Name)与你的服务器域名或IP应相同。参考另一篇文章。在下面的例子中,JDK安装目录为/usr/lib/jvm/jdk8/
,如果你的JDK安装在其它目录,你需要相应调整。
- 首先使用下面的命令查看当前JDK中已安装的证书,如果提示需要密码,输入
changeit
keytool -list -keystore /usr/lib/jvm/jdk8/jre/lib/security/cacerts # 或Openjdk 11 keytool -list -keystore /usr/lib/jvm/java-11-openjdk/lib/security/cacerts
- 导入CA根证书:
cd /usr/lib/jvm/jdk8/jre/lib/security keytool -keystore cacerts -importcert -alias YOUR_CA_ALIAS -file ca.crt
- 导入成功后,你就可以在Java里正常访问自生成的SSL证书了。