和用户对接时,我们的应用服务请求用户的接口报错 The connection observed an errorio.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
,但在本地开发环境 Windows 10 系统中直接请求这个 https 接口是正常的。
根据服务异常信息,可以大略猜到是 SSL 证书的问题。
查看用户的证书信息,发现证书机构是 CFCA(中国金融认证中心),并不是常见的 GlobalSign、DigiCert、GeoTrust 等证书机构。
在服务器上使用命令 keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
(默认密码为 changeit
)查看 JDK 的根证书机构库,没有发现 CFCA 这个机构。
由于根证书机构 CFCA 不被信任,我们的 Java 服务就无法判断此 https 站点证书的合法性了,所以就报错了。
在 Windows 10 系统中打开证书管理工具(通过快捷键 Win + R
打开 运行
窗口,再输入 certlm.msc
后回车) ,是可以看到 CFCA 这个机构的根证书的,所以在本地开发环境 Windows 10 系统中直接请求这个 https 接口是正常的。
把 CFCA 这个机构的根证书导入 JDK 信任库。
导出 CFCA 根证书为 cfca.cer 。
导入 CFCA 根证书到 Java 服务所在服务器的 JDK 根证书库。
# cd $JAVA_HOME/jre/lib/security/# cp cacerts{,.bak}// 要先上传 cfca.cert 到 ${JAVA_HOME}/jre/lib/security/ 目录// -import:导入证书或者者证书链// -alias:指定在 cacerts 文件中的证书条目别名// -keystore:指定 JDK 证书库文件// -file:指定要导入的证书// 默认密码为 changeit# keytool -import -alias cfca -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file ${JAVA_HOME}/jre/lib/security/cfca.cerEnter keystore password: Owner: CN=CFCA EV ROOT, O=China Financial Certification Authority, C=CNIssuer: CN=CFCA EV ROOT, O=China Financial Certification Authority, C=CNSerial number: 184accd6Valid from: Wed Aug 08 11:07:01 CST 2012 until: Mon Dec 31 11:07:01 CST 2029Certificate fingerprints: MD5: 74:E1:B6:ED:26:7A:7A:44:30:33:94:AB:7B:27:81:30 SHA1: E2:B8:29:4B:55:84:AB:6B:58:C2:90:46:6C:AC:3F:B8:39:8F:84:83 SHA256: 5C:C3:D7:8E:4E:1D:5E:45:54:7A:04:E6:87:3E:64:F9:0C:F9:53:6D:1C:CC:2E:F8:00:F3:55:C4:C5:FD:70:FDSignature algorithm name: SHA256withRSASubject Public Key Algorithm: 4096-bit RSA keyVersion: 3Extensions: #1: ObjectId: 2.5.29.35 Criticality=falseAuthorityKeyIdentifier [KeyIdentifier [0000: E3 FE 2D FD 28 D0 0B B5 BA B6 A2 C4 BF 06 AA 05 ..-.(...........0010: 8C 93 FB 2F .../]]#2: ObjectId: 2.5.29.19 Criticality=trueBasicConstraints:[ CA:true PathLen:2147483647]#3: ObjectId: 2.5.29.15 Criticality=trueKeyUsage [ Key_CertSign Crl_Sign]#4: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: E3 FE 2D FD 28 D0 0B B5 BA B6 A2 C4 BF 06 AA 05 ..-.(...........0010: 8C 93 FB 2F .../]]Trust this certificate? [no]: yesCertificate was added to keystore// 查看导入的证书# keytool -list -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias cfcaEnter keystore password: cfca, Jan 29, 2021, trustedCertEntry, Certificate fingerprint (SHA1): E2:B8:29:4B:55:84:AB:6B:58:C2:90:46:6C:AC:3F:B8:39:8F:84:83# keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts | grep CFCAEnter keystore password: changeitOwner: CN=CFCA EV ROOT, O=China Financial Certification Authority, C=CNIssuer: CN=CFCA EV ROOT, O=China Financial Certification Authority, C=CN
Copyright © 2013-2021 xieniao.com. 血鸟 版权所有 景德镇送码科技有限公司 赣ICP备19014045号-2
增值电信业务许可证:赣B2-20200002 赣公网安备 36020302000062号