jdk导入安全证书

244 阅读4分钟

jdk导入安全证书

SSLHandshakeException

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1428)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)

解决方案

获取证书

  1. 点击“证书(有效)”,即显示证书的相关信息。
  2. 点击“详细信息”,点击“导出”。
  3. 选择证书保存路径与文件名称,选择“Base64 编码ASCII,单一证书”的格式导出证书,然后点击“保存”,即可完成证书下载流程。

证书导入JDK的步骤

解释说明:
  1. spdbuat是自己可以修改的名称,spdbuat.cer是导出的证书,同样,这里的证书名字也是可以任意取的,但前提是保证将JDK下的指定目录(以自己实际情况为准)C:\Program Files\Java\jdk.1.8.0_212\jre\lib\security目录的cacerts文件之前没有导入同名证书,就是要保证你将要导入证书名称的唯一性。
  2. changeit是密码,Java默认的。
  3. keytool是jdk中bin目录的一个可执行文件,jdk默认自带的,示例机器中的路径是C:\Program Files\Java\jdk.1.8.0_212\jre\bin\keytool.exe。
  4. %JAVA_HOME%/jre/lib/securty/cacerts路径中,%JAVA_HOME%/jre/lib/security/是目录,cacerts是文件(即要把证书导入到其中),提前请确保您已经正确配置过JAVA_HOME环境变量。
  5. 如果提示:“是否信任此证书?[否]”,请输入y并回车。当出现:“证书已添加到秘钥库中[正在存储cacerts]”的时候,表示您已经导入成功。
注意:
  1. 如果提示找不到指定文件,那么有可能是路径错了,这里是先执行cd C:\Program Files\Java\jdk.1.8.0_212\jre\bin\ (路径以实际为准),来到keytool.exe所在的目录执行以上命令。后续更新时,先删除原来的证书,然后导入新的证书。
Windows命令行执行
keytool -import -v -trustcacerts -alias spdbuat -file domain.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacertsLinux 执行
Linux 执行
keytool -import -v -trustcacerts -alias spdbuat -file domain.cer  -storepass changeit -keystore /usr/local/openjdk-8/jre/lib/security/cacerts
keytool 常用命令
//查看cacerts中的证书列表
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

//删除cacerts中指定名称的证书
keytool -delete -alias domain -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
//导入指定证书到cacerts
keytool -import -alias spdbuat -file domain.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit -trustcacerts

解决方案

获取证书

1 点击“证书(有效)”,即显示证书的相关信息。
2 点击“详细信息”,点击“导出”。
3 选择证书保存路径与文件名称,选择“Base64 编码ASCII,单一证书”的格式导出证书,然后点击“保存”,即可完成证书下载流程。

证书导入JDK的步骤

1 spdbuat是自己可以修改的名称,spdbuat.cer是导出的证书,同样,这里的证书名字也是可以任意取的,但前提是保证将JDK下的指定目录(以自己实际情况为准)C:\Program Files\Java\jdk.1.8.0_212\jre\lib\security目录的cacerts文件之前没有导入同名证书,就是要保证你将要导入证书名称的唯一性。
2 changeit是密码,Java默认的。
3 keytool是jdk中bin目录的一个可执行文件,jdk默认自带的,示例机器中的路径是C:\Program Files\Java\jdk.1.8.0_212\jre\bin\keytool.exe。
4 %JAVA_HOME%/jre/lib/securty/cacerts路径中,%JAVA_HOME%/jre/lib/security/是目录,cacerts是文件(即要把证书导入到其中),提前请确保您已经正确配置过JAVA_HOME环境变量。
5 如果提示:“是否信任此证书?[否]”,请输入y并回车。当出现:“证书已添加到秘钥库中[正在存储cacerts]”的时候,表示您已经导入成功。

注意:
1如果提示找不到指定文件,那么有可能是路径错了,这里是先执行cd C:\Program Files\Java\jdk.1.8.0_212\jre\bin\ (路径以实际为准),来到keytool.exe所在的目录执行以上命令。后续更新时,先删除原来的证书,然后导入新的证书。

Windows命令行执行

keytool -import -v -trustcacerts -alias spdbuat -file spdbuat.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

 

Linux 执行

keytool -import -v -trustcacerts -alias spdbuat -file spdbuat.cer -storepass changeit -keystore /usr/local/openjdk-8/jre/lib/security/cacerts

keytool 常用命令

//查看cacerts中的证书列表
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

//删除cacerts中指定名称的证书
keytool -delete -alias spdbuat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

//导入指定证书到cacerts
keytool -import -alias spdbuat -file spdbuat.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit -trustcacerts

错误提示:非法选项: Files\Java\jdk1.8.0_201\jre\lib\security\cacerts,可以尝试在keystore参数路径中加上双引号。  
keytool -import -v -trustcacerts -alias spdbuat -file spdbuat.cer -storepass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts"