2011-08-18 9 views
3

X509 SSL証明書とそれが署名された中間CA証明書とルートCA証明書を含むPKCS#7の署名付き.p7bファイルがあります。私はC#を使用して.p7bファイルを解析し、S​​SL証明書を取り出し、それからいくつかの値を取り出す必要があります(有効期限、DNなど)。PKCS#7 SSL証明書チェーン(.p7b)を秘密鍵なしで解析しますか?

私はそうのようなX509証明書として、それを読んで試してみた:通常の.cerの証明書を使用して正常に動作しますが、.P7B証明書で使用する場合CryptographicExceptionをスロー

//certContent is a byte array with the p7b file contents 
X509Certificate2 cert = new X509Certificate2(certContent); 

。これは、.p7bに証明書チェーン全体が含まれているためです。

私はまた、証明書チェーンを反復処理し、私のSSL証明書を引き出し、SignedCmsオブジェクトとしてそれを解析してみた:

SignedCms certContainer = new SignedCms(); 
certContainer.Decode(certContent); 
foreach(X509Certificate2 cert in certConatiner.Certificates) 
{ 
    ... 
} 

ことがASN1 bad tag value metを言っDecodeに例外がスローされますが。いくつかの検索の後、証明書の作成や証明書への署名に使用された秘密鍵がないためと考えています。

私はこのC#を使用してこの.p7b証明書チェーンを解析する方法を知っていますか?

答えて

1

まあ、私はばかです。私は.p7bファイルを開いて、それが内部のbase64だけであることに気づいた。私はbase64を取り出し、それをデコードし、それを署名付きCMSとして解析し、すべてがうまくいきました。

String content = Encoding.UTF8.GetString(certContent); 
String base64Content = content.Replace("-----BEGIN CERTIFICATE-----", "").Replace("-----END CERTIFICATE-----", "").Replace("\r", "").Replace("\n", ""); 
byte[] decodedContent = Convert.FromBase64String(base64Content); 
SignedCms certContainer = new SignedCms(); 
certContainer.Decode(decodedContent); 
+0

これは私が問題を抱えていることです。データベースからバイトを取得し、それをX509Certificateに変換するコードの部分を共有してください。ありがとう – daehaai

関連する問題