Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用crypt32.dll创建签名证书_C#_Ssl_Certificate - Fatal编程技术网

C# 使用crypt32.dll创建签名证书

C# 使用crypt32.dll创建签名证书,c#,ssl,certificate,C#,Ssl,Certificate,我想在C#.net中以编程方式创建由CA签名的证书。我能够使用CertCreateSelfSignCertificate创建自签名证书,如下所述: 我查阅了MSDN文档,但似乎找不到生成证书并根据请求签名的函数。大多数函数似乎都是用来操作证书存储的。我在这里查错dll了吗?首先,我倾向于尝试使用它。它基本上是cryptoapi的包装器。我找到了答案。我在调试器中加载了makecert.exe,发现它正在使用此调用创建签名证书:CryptSignAndEncodeCertificate 我也尝试

我想在C#.net中以编程方式创建由CA签名的证书。我能够使用CertCreateSelfSignCertificate创建自签名证书,如下所述:


我查阅了MSDN文档,但似乎找不到生成证书并根据请求签名的函数。大多数函数似乎都是用来操作证书存储的。我在这里查错dll了吗?

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

我找到了答案。我在调试器中加载了makecert.exe,发现它正在使用此调用创建签名证书:CryptSignAndEncodeCertificate

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

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)