C# で CSR の内容を読みたい。しかし、C# でそれを行う方法が見つかりませんでした。私が見つけたのは namespace でしたが、System.Security.Cryptography.X509Certificates
証明書の要求ではなく、既存の証明書のみを処理します。
誰か私にそれについてのヒントを教えてもらえますか? 前もって感謝します。
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
最初にサブジェクト名をインスタンスにキャストする必要があるため、唯一の楽しい部分はサブジェクト名を取得することです。
管理されていない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 に実装が既に存在する場合は意味がないと思います。CryptSignAndEncodeCertificate
X509_CERT_REQUEST_TO_BE_SIGNED
AsnEncodedData
http://msdn.microsoft.com/en-us/library/aa382364(VS.85).aspxおよびhttp://msdn.microsoft.com/enには、CryptoAPI に関して CSR を作成するための良い例があります。 -us/library/ms867026.aspx .
これは、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);
.
.
.
X509Request
type には、CSR ファイルのテキストからすべてを取得するためのプロパティがあります。
同じ問題がありました。私は解決策を見つけることができませんでした;「発明された」;)回避策について。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();
}