编辑1 :https://security.stackexchange.com/questions/83972/trust-ca-and-parent-ca-but-not-other-derivative-cas。见评论。我的客户端/服务器是java,因此可能的解决方案是实现我自己的javax.net.ssl.TrustManager实现。
我遇到了客户端通过SSL加密套接字连接服务器的问题。我有3个CA:
我想为服务器创建一个信任库:
我的问题:如果我生成仅包含测试人员CA证书的信任库,则根CA签署的客户端证书将失败(我希望证书链允许它)。如果我生成包含测试CA和根CA的信任库,则还允许通过生产签署的证书。
有什么办法吗?
答案 0 :(得分:0)
有一种肮脏的方式!您可以打破服务器证书链 - >您在KeyStore中的中间证书(生产CA),以便前者无法由根CA验证。
从密钥库导出服务器证书条目,并从PEM文件中删除颁发者(生产CA)证书并将其导回。
>keytool -exportcert -rfc -file scert.pem -keystore store.jks -alias salias
打开pem文件,第一个----- BEGIN CERTIFICATE -----<> ----- END CERTIFICATE -----是服务器证书,下面的将是发行人(Prod CA)。删除颁发者并重新导入.pem文件。
> keytool -importcert -keystore store.jks -alias salias -file broken.pem
现在,当服务器证书提交给客户端时,它不能被TrustStore中的根CA验证为服务器证书 - >生产CA->根CA已损坏。