使用crypt32.dll创建签名证书

时间:2009-04-16 16:44:00

标签: c# ssl certificate

我想在C#.net中以编程方式创建由CA签名的证书。我能够使用CertCreateSelfSignCertificate创建一个自签名证书,如下所述: http://msdn.microsoft.com/en-us/library/aa376039(VS.85).aspx Self Signed Certificate in Windows without makecert?

我正在查看MSDN文档,但我似乎无法找到生成证书并从请求中签名的函数。大多数函数似乎是用于操作证书库。我在这里咆哮错误的dll吗?

3 个答案:

答案 0 :(得分:5)

我尝试了非托管方法但没有成功。与此相反,使用BouncyCastle创建证书非常简单:

var keygen = new RsaKeyPairGenerator();
keygen.Init(new KeyGenerationParameters(new SecureRandom(), 2048));

var keys = keygen.GenerateKeyPair();

var certGen = new X509V3CertificateGenerator();
var dnName = new X509Name("CN=Test CA");

certGen.SetSerialNumber(BigInteger.ValueOf(1));
certGen.SetIssuerDN(dnName);
certGen.SetNotBefore(DateTime.Today);
certGen.SetNotAfter(DateTime.Today.AddYears(10));
certGen.SetSubjectDN(dnName);
certGen.SetPublicKey(keys.Public);
certGen.SetSignatureAlgorithm("SHA1WITHRSA");

var cert = certGen.Generate(keys.Private);

这是一个自签名CA证书,但创建签名证书是相同的。只需更改颁发者和签名私钥即可。您也可以将证书导出到DER(.cer)和PKCS12(.p12)。

答案 1 :(得分:1)

我倾向于首先尝试使用capicom.dll。它基本上是cryptoapi的包装器。

答案 2 :(得分:1)

我找到了答案。我在调试器中加载了makecert.exe,发现它正在使用此调用来创建签名证书:CryptSignAndEncodeCertificate http://msdn.microsoft.com/en-us/library/aa380277(VS.85).aspx