Cryptography 对RootCA和SubCA使用相同的私钥是否有效?

Cryptography 对RootCA和SubCA使用相同的私钥是否有效?,cryptography,x509certificate,bouncycastle,jce,Cryptography,X509certificate,Bouncycastle,Jce,我已经通过PKI创建了根CA和子CA证书具有相同的私钥。此PKI创建一个叶(结束实体)证书 我使用三种不同的加密提供程序来读取证书链:RSA BSAFE、IBMJCE和BouncyCastle KeyStore ks = KeyStore.getInstance(PKCS12, provider); ks.load(null, password); X509Certificate[] chain = (X509Certificate[]) ks.getCertifica

我已经通过PKI创建了根CA和子CA证书具有相同的私钥。此PKI创建一个叶(结束实体)证书

我使用三种不同的加密提供程序来读取证书链:RSA BSAFE、IBMJCE和BouncyCastle

KeyStore ks = KeyStore.getInstance(PKCS12, provider);
ks.load(null, password);

X509Certificate[] chain =
            (X509Certificate[]) ks.getCertificateChain(keyAlias);

RSA BSAFE和IBMJCE返回带有SUBA和RootCA证书的叶证书。但是BouncyCastle只返回叶证书

为什么BC不返回完整的链?哪种行为是正确的


通过谷歌搜索,似乎不禁止在CA之外使用相同的私钥(尽管这似乎是一种不好的做法)

与多个CA共享相同的密钥有什么意义?在当前的设计中,你的子证书是无用的,浪费了证书链中的资源和空间。我同意你的看法。但正如我所说的,三家供应商中有两家退回了连锁店。BC只返回叶子。甚至连副卡都没有。我在问为什么?这是个糟糕的练习期。如果任何认证机构发现某个组织正在这样做,您将无法获得认证。请注意,它对密钥管理具有严重的连锁反应。例如,所有子CA都需要与根证书具有相同的有效期。如果私钥泄漏,您将如何使子CA无效?在这种情况下,CRL是无用的。在Bouncy Castle的案例中,它可能是一个bug。这也可能意味着它试图通过检查证书中的公钥是否与签署证书的公钥相同来检测是否使用了自签名证书。如果你重复使用钥匙,那么这是真的,链条就停在那里。不过,我不完全确定它是否应该是这样的。你的问题中遗漏了很多信息。例如,CA证书中存在哪些扩展。包含构造和验证链的复杂过程。可悲的是,正如在初学者问题中经常出现的情况一样,缺少a将这个问题变成了一个猜测游戏。如果您想改进您的问题,请这样说,我们可以提供帮助。