10

C# で CSR の内容を読みたい。しかし、C# でそれを行う方法が見つかりませんでした。私が見つけたのは namespace でしたが、System.Security.Cryptography.X509Certificates証明書の要求ではなく、既存の証明書のみを処理します。

誰か私にそれについてのヒントを教えてもらえますか? 前もって感謝します。

4

5 に答える 5

23

Windows に付属している CertEnroll ライブラリ (どのくらい前のものかはわかりませんが) を使用すると、証明書要求を読み込んで解析することができます。

CERTENROLLLib最初に、 COM ライブラリへの参照をプロジェクトにインポートする必要があります。これにより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);

CX500DistinguishedName最初にサブジェクト名をインスタンスにキャストする必要があるため、唯一の楽しい部分はサブジェクト名を取得することです。

于 2011-03-22T19:37:16.180 に答える
1

管理されていないCryptoAPIまたはP/Invokeを使用するのが最善の方法だと思います。CryptoAPI には、パラメーターで使用できるCERT_REQUEST_INFOデータ構造体と関数があります。理論的には、CSR は複雑ではないため、リクエストを手動でエンコードすることは可能です ( http://en.wikipedia.org/wiki/Certificate_signing_requestおよびhttp://www.rfc-editor.org/rfc/rfc2311 を参照)。 txt ) ですが、CryptoAPI に実装が既に存在する場合は意味がないと思います。CryptSignAndEncodeCertificateX509_CERT_REQUEST_TO_BE_SIGNEDAsnEncodedData

http://msdn.microsoft.com/en-us/library/aa382364(VS.85).aspxおよびhttp://msdn.microsoft.com/enには、CryptoAPI に関して CSR を作成するための良い例があります。 -us/library/ms867026.aspx .

于 2010-05-13T22:57:43.563 に答える
1

これは、OpenSSL.NETライブラリで行う方法です。

// Load the CSR file
var csr = new X509Request(BIO.File("C:/temp/test.csr", "r"));
OR
var csr = new X509Request(@"-----BEGIN CERTIFICATE REQUEST-----...");

// Read CSR file properties
Console.WriteLine(csr.PublicKey.GetRSA().PublicKeyAsPEM);
Console.WriteLine(csr.Subject.SerialNumber);
Console.WriteLine(csr.Subject.Organization);
.
.
.

X509Requesttype には、CSR ファイルのテキストからすべてを取得するためのプロパティがあります。

于 2012-02-28T13:58:33.187 に答える
-1

同じ問題がありました。私は解決策を見つけることができませんでした;「発明された」;)回避策について。CertUtil.exe は、証明書を作成、読み取り、送信、受け入れ、インストールするための Microsoft のコマンド ライン ユーティリティです。System.Diagnostics.Process を使用して外部プロセスを作成し、CSR 要求ファイルを引数として渡してファイルをストリームに読み込みました。そのためのコードを次に示します。

using (System.Diagnostics.Process extProc = new System.Diagnostics.Process())
{
      extProc.StartInfo.CreateNoWindow = true;
      extProc.StartInfo.UseShellExecute = false;
      extProc.StartInfo.RedirectStandardOutput = true;

      extProc.StartInfo.FileName = @"C:\certtest\Util_xpVersion\certutil.exe";
      extProc.StartInfo.Arguments = "-dump \"C:\\certtest\\Util_xpVersion\\ToolCSR.crq\"";

      extProc.Start();
      extProc.WaitForExit();
      string sTemp = extProc.StandardOutput.ReadToEnd();
      extProc.Close();
}
于 2010-11-10T17:35:35.200 に答える