使用c#读取证书签名请求

Jor*_*rge 7 c# parsing csr x509

我想在c#中读取csr的内容,但是我没有找到任何方法在c#中执行此操作.我发现的是命名空间System.Security.Cryptography.X509Certificates,但它只处理现有证书,而不是证书请求:/

任何人都可以给我一个提示吗?提前致谢.

乔治

blo*_*art 19

有一种方法,Windows附带的CertEnroll库(虽然我不能说它已经存在多远)允许您加载证书请求并解析它们.

首先,您需要将对CERTENROLLLibCOM库的引用导入到项目中.这将创建一个CERTENROLLLib您可以使用的名称空间.

然后你做这样的事情;

string csr = "-----BEGIN CERTIFICATE REQUEST-----\r\n" +
             "MIIBnTCCAQYCAQAwXTELMAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIw\r\n" +
             "EAYDVQQDEwlsb2NhbGhvc3QxJzAlBgkqhkiG9w0BCQEWGGFkbWluQHNlcnZlci5l\r\n" +
             "eGFtcGxlLmRvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr1nYY1Qrll1r\r\n" +
             "uB/FqlCRrr5nvupdIN+3wF7q915tvEQoc74bnu6b8IbbGRMhzdzmvQ4SzFfVEAuM\r\n" +
             "MuTHeybPq5th7YDrTNizKKxOBnqE2KYuX9X22A1Kh49soJJFg6kPb9MUgiZBiMlv\r\n" +
             "tb7K3CHfgw5WagWnLl8Lb+ccvKZZl+8CAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GB\r\n" +
             "AHpoRp5YS55CZpy+wdigQEwjL/wSluvo+WjtpvP0YoBMJu4VMKeZi405R7o8oEwi\r\n" +
             "PdlrrliKNknFmHKIaCKTLRcU59ScA6ADEIWUzqmUzP5Cs6jrSRo3NKfg1bd09D1K\r\n" +
             "9rsQkRc9Urv9mRBIsredGnYECNeRaK5R1yzpOowninXC\r" + 
             "-----END CERTIFICATE REQUEST-----";

CX509CertificateRequestPkcs10 request = new CX509CertificateRequestPkcs10();
request.InitializeDecode(csr, EncodingType.XCN_CRYPT_STRING_BASE64_ANY);
request.CheckSignature();

Console.WriteLine(((CX500DistinguishedName)request.Subject).Name);
Console.WriteLine(request.PublicKey.Length);
Console.WriteLine(request.HashAlgorithm.FriendlyName);
Run Code Online (Sandbox Code Playgroud)

您可以看到唯一有趣的部分是获取主题名称,因为您需要CX500DistinguishedName先将其强制转换为实例.

  • (我非常想知道为什么这被否决了-它是准确的,有效的并且不需要任何第三方库) (2认同)

Ole*_*leg 1

在我看来,对您来说最好的方法是使用非托管 CryptoAPI 或 P/Invoke。CryptoAPI 具有可与参数一起使用的CERT_REQUEST_INFO数据结构和函数。当然,理论上可以根据 手动编码请求,因为 CSR 并不复杂(请参阅http://en.wikipedia.org/wiki/Certificate_signing_requesthttp://www.rfc-editor.org/rfc/rfc2311。 txt),但我认为如果 CryptoAPI 中已经存在实现,那么它没有任何意义。CryptSignAndEncodeCertificateX509_CERT_REQUEST_TO_BE_SIGNEDAsnEncodedData

您可以在http://msdn.microsoft.com/en-us/library/aa382364(VS.85).aspxhttp://msdn.microsoft.com/en中找到创建有关 CryptoAPI 的 CSR 的好示例-us/library/ms867026.aspx