充气城堡和 'New' ISignatureFactory

Bouncy Castle & the 'New' ISignatureFactory

我把 'New' 加在吓人的引号中,因为我不确定接口是什么时候实现的(旧的 SetSignatureAlgorithm() 方法已弃用)。

我正在遵循此代码:

https://github.com/rlipscombe/bouncy-castle-csharp/blob/master/CreateCertificate/Program.cs

因为它是大约八年前写的,所以它使用现已弃用的 SetSignatureAlgorithm() 方法。但是我 运行 在使用新的 ISignatureFactory API:

时遇到了问题
ISignatureFactory signatureFactory = new Asn1SignatureFactory(PkcsObjectIdentifiers.Sha256WithRsaEncryption.ToString(), subjectKeyPair.Private, random);
var certificate = certificateGenerator.Generate(signatureFactory);

当我使用这种新语法时,由先前创建的根 CA 签署的新证书出现损坏:

奇怪的是,根 CA 本身创建得很好。只有子证书失败了。当我切换回已弃用的语法时,一切都会顺利进行。

如何使用新的 ISignatureFactory 语法成功签署子证书?

好的,知道了。我使用了错误的私钥:

ISignatureFactory signatureFactory = new Asn1SignatureFactory(PkcsObjectIdentifiers.Sha256WithRsaEncryption.ToString(), subjectKeyPair.Private, random);

我正在用自己的私钥签署新证书。这就是为什么它适用于根 CA 而不是子 CA。

我将 subjectKeyPair 更改为 issuerKeyPair 并且一切正常。