keytool查看和导入证书,使用 jre 发行包中的 cacerts 操作方法

2024-10-09 12:28:23 浏览数 (5)

keytool查看和导入证书,使用 jre 发行包中的 cacerts 操作方法

接上篇 支付宝调用接口openapi CY24蚂蚁集团网站新根证书升级说明 https://www.cnblogs.com/oktokeep/p/18331448

本地运行测试类报错: Caused by: 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

使用 jre 发行包中的 cacerts cacerts 文件是 Java 环境默认使用的信任根证书库,位于 %JAVA_HOME%/lib/security/目录下,cacerts 文件本质是一个JKS (Java KeyStore),可使用 Java 发行包中自带的 keytool 工具来查看和修改,默认密码为“changeit”

关键:需要定位到文件cacerts的当前目录下: D:Program FilesJavajdk1.8.0_11jrelibsecurity 命令如下: keytool -list -v -keystore cacerts > mycacerts.txt

DEMO1

代码语言:javascript复制
D:Program FilesJavajdk1.8.0_11jrelibsecurity>keytool -list -v -keystore cacerts > mycacerts.txt
输入密钥库口令:  changeit

Warning:
<thawtepremiumserverca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<thawteserverca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureebusinessca1> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<thawtepersonalfreemailca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<secomvalicertclass1ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureglobalebusinessca1> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass3ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass1ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass3g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<gtecybertrustglobalca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisigntsaca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<valicertclass2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass2g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<entrustsslca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass1g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。

导出的mycacerts.txt是否包含搜素关键字 "DigiCert Global Root G2" 如果没有查找到怎么处理 方案1 : 添加根证书到 cacerts keytool -keystore cacerts -importcert -alias DigiCertGlobalRootG2With2024 -file D:/alipayG2/DigiCertGlobalRootG2.crt.pem

DigiCertGlobalRootG2.crt.pem文件的下载地址:https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem DEMO2

代码语言:javascript复制
 D:Program FilesJavajdk1.8.0_11jrelibsecurity>keytool -keystore cacerts -importcert -alias DigiCertGlobalRootG2With2024 -file D:/alipayG2/DigiCertGlobalRootG2.crt.pem
输入密钥库口令:
所有者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
发布者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
序列号: 33af1e6a711a9a0bb2864b11d09fae5
生效时间: Thu Aug 01 20:00:00 CST 2013, 失效时间: Fri Jan 15 20:00:00 CST 2038
证书指纹:
         SHA1: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4
         SHA256: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  DigitalSignature
  Key_CertSign
  Crl_Sign
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 4E 22 54 20 18 95 E6 E3   6E E6 0F FA FA B9 12 ED  N"T ....n.......
0010: 06 17 8F 39                                        ...9
]
]

是否信任此证书? [否]:  y
证书已添加到密钥库中

方案2 : 升级JDK版本 正常情况下 JDK 1.6.05 及以上版本的 cacerts 应已经包含了 DigiCert Global Root CA,JDK 1.8.0 131 及以上版本的 cacerts 应已经包含了 DigiCert Global Root G2

导入之后,重新查询

DEMO3

代码语言:javascript复制
D:Program FilesJavajdk1.8.0_11jrelibsecurity>keytool -list -v -keystore cacerts > mycacertsV2.txt
输入密钥库口令:  changeit

Warning:
<thawtepremiumserverca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<thawteserverca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureebusinessca1> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<thawtepersonalfreemailca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<secomvalicertclass1ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<equifaxsecureglobalebusinessca1> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass3ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass1ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass3g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<gtecybertrustglobalca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisigntsaca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<valicertclass2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass2g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<entrustsslca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。
<verisignclass1g2ca> 使用的 1024 位 RSA 密钥 被视为存在安全风险。此密钥大小将在未来的更新中被禁用。

导出的mycacertsV2.txt是否包含搜素关键字 "DigiCert Global Root G2",这次搜索到了,内容如下:

代码语言:javascript复制
摘要信息如下:
别名: digicertglobalrootg2with2024
创建日期: 2024-8-8
条目类型: trustedCertEntry

所有者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
发布者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
序列号: 33af1e6a711a9a0bb2864b11d09fae5
生效时间: Thu Aug 01 20:00:00 CST 2013, 失效时间: Fri Jan 15 20:00:00 CST 2038
证书指纹:
	 SHA1: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4
	 SHA256: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

再次运行测试类,运行正常不报错了。

代码语言:javascript复制
private static AlipayClient ac = null;

    /**
     * Caused by: 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
     * @return
     */
    public static com.alipay.api.AlipayClient getAlipayClient(){
        if(ac == null){
//            com.alipay.api.AlipayClient alipayClient = new com.alipay.api.DefaultAlipayClient("https://openapi.alipay.com/gateway.do","you appid",prv_key,"JSON","utf-8",pub_key,"RSA2");
            com.alipay.api.AlipayClient alipayClient = new com.alipay.api.DefaultAlipayClient("https://openapi-with-g2-only.alipay.com/gateway.do","you appid",prv_key,"JSON","utf-8",pub_key,"RSA2");
            ac = alipayClient;
        }
        return ac;
    }

最后测试下高版本的jdk C:Program FilesJavajdk1.8.0_333 是否包含该根证书。 D:Program FilesJavajdk1.8.0_11jrelibsecurity>java -version java version "1.8.0_421" Java(TM) SE Runtime Environment (build 1.8.0_421-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)

查看环境变量的配置,JAVA_HOME路径。 C:Program FilesJavajdk1.8.0_333jrelibsecurity>keytool -list -v -keystore cacerts > mycacertsV3.txt 拒绝访问。

使用PowerShell客户端来访问。 >> cmd 出现在列表中,然后按下 Ctrl Shift Enter 快捷键,打开管理员权限的dos命令窗口

DEMO4

代码语言:javascript复制
C:Program FilesJavajdk1.8.0_333jrelibsecurity>keytool -list -v -keystore cacerts > mycacertsV3.txt
输入密钥库口令:  changeit

导出的mycacertsV3.txt是否包含搜素关键字 "DigiCert Global Root G2",这次搜索到了,内容如下:

代码语言:javascript复制
别名: digicertglobalrootg2 [jdk]
创建日期: 2016-8-25
条目类型: trustedCertEntry

所有者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
发布者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
序列号: 33af1e6a711a9a0bb2864b11d09fae5
生效时间: Thu Aug 01 20:00:00 CST 2013, 失效时间: Fri Jan 15 20:00:00 CST 2038
证书指纹:
	 SHA1: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4
	 SHA256: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

0 人点赞