如何使用 BouncyCastle 或 Java 11 签署证书

How to sign a certificate using BouncyCastle or Java 11

我有一个现有证书 (C1),包括私钥,但未标记为 CA 且受内部根 CA (C0) 信任 我想用它来:

客户端:

服务器端:

到目前为止,我找到了有关如何使用通用密钥签署新密钥的文章: Creating an X509 Certificate in Java without BouncyCastle?

但是:

正如 Boriss the Spider 在评论中指出的,如果不满足以下任何条件,则不允许证书签署其他证书:

  1. 证书主体必须是 CA,通过 Basic Constraints certificate extension. See my blog post 关于基本约束在实践中的工作方式以及证书链引擎如何对违规做出反应。
  2. 证书必须包含 certKeySignKey Usage 证书扩展中的用法

Validate the chain regardless of C1 not being a CA

很难禁用基本约束和密钥使用扩展验证并保留其他验证步骤,这可能需要完全禁用客户端证书验证。这是一个简单的 PKI 误用,它会打开各种漏洞,因为您无法实施正确的证书验证。