首页 > 解决方案 > SSL TrustStore 没有 CA,只有客户端证书

问题描述

我有一个自定义 CAroot.crt(由我生成),我所有的客户证书都用这个 CAroot.crt 签名。我有一个 TrustStore.jks,我只放了客户端证书而不放 CAroot.crt,因为我希望可以随时从我的信任库中删除客户端。

当我尝试启动我的应用程序时,我得到了以下信息:

*** Certificate chain
<Empty>
***
main, fatal error: 42: null cert chain

这是我的 trustStore.jks:

Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: localhost
Creation date: Nov 23, 2019
Entry type: trustedCertEntry

Owner: CN=localhost, OU=IT, O=QUEROBUY, L=SAO CAETANO DO SUL, ST=SAO PAULO, C=BR
Issuer: CN=localhost, OU=IT, O=LANHELLAS XYZ, L=SAO CAETANO DO SUL, ST=SAO PAULO, C=BR
Serial number: 5416c04e360f9d50323c52d8a5b04be2969c9b86
Valid from: Sat Nov 23 16:39:54 BRT 2019 until: Tue Apr 06 16:39:54 BRT 2021
Certificate fingerprints:
     MD5:  8F:29:1C:1F:05:89:0B:E6:A0:57:84:FE:B0:78:68:2D
     SHA1: 95:C8:EA:0E:C8:7C:4E:99:E4:73:85:49:57:D6:BB:88:AF:52:52:12
     SHA256: 7E:ED:19:AF:02:DB:CC:88:98:D0:10:4E:39:67:AA:4D:3F:70:DA:76:03:1B:CB:41:06:DC:3B:51:38:16:78:5F
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1


*******************************************
*******************************************

如果我将“CARoot.crt”添加到我的 trustStore.jks 一切正常,但我失去了使某些特定客户端证书无效的机会。想象一下,我有 10 个客户端,每个客户端都有您自己的证书 (.crt),由“CARoot.crt”分配,但由于某种原因,客户端 001 应该立即失效,我只会从服务器中的 trustStore.jks 中删除您的公钥,而不我应该等待证书到期日期。

标签: sslopensslssl-certificatex509certificate2

解决方案


TrustStore.jks 是 java 将如何确定它是否信任证书的方式。它本质上是一个根证书的密钥库文件。如果您想避免“不信任消息”,则必须将您的根证书添加到此存储中。

在您的场景中,由于您使用该根来颁发 10 个客户端证书,因此从您的信任或密钥存储中删除 client_certificate.crt 不会不信任它。因为,按照设计,java 正在查看 TrustStore 并找到根证书,因此仍然信任 client_certificate.crt。您将需要重新设计您的 CA。

在部署任何类型的 PKI 基础架构时,您还需要设置 CRL 和/或 OCSP 服务器。这是用于吊销证书的两种协议。

我还建议您不要直接从根颁发“最终用户证书”。它最好在根目录下颁发中间证书,然后使用 middle_certificate.crt 来颁发您的实际服务器或客户端证书。出于某种原因,请参见此处:https ://security.stackexchange.com/questions/128779/why-is-it-more-secure-to-use-intermediate-ca-certificates#128800

这是使用 OpenSSL 部署您自己的 CA 的一种简单易用的方法。它将向您展示如何设置根服务器、中间服务器和撤销服务器。https://jamielinux.com/docs/openssl-certificate-authority/


推荐阅读