2016-02-24 89 views
2

如何確保我的導出證書文件是DER編碼? 有沒有辦法檢查文件?c#System.Security.Cryptography.X509Certificates.X509ContentType.Cert is this DER?

我可以加載到內存中的證書導出到文件

string strFilename = _rksvpath + cert.GetSerialNumberString() + ".cer"; 
byte[] bytesCertExport = cert.Export(System.Security.Cryptography.X509Certificates.X509ContentType.Cert); 
File.WriteAllBytes(strFilename, bytesCertExport); 

和文件就OK了,我可以用的certutil證明

C:\>certutil -dump C:\temp\0104A73D4557FCE026120AC356.cer 
X.509-Zertifikat: 
Version: 3 
Seriennummer: 0104a73d4557fce026120ac356 
Signaturalgorithmus: 
Algorithmus Objekt-ID: 1.2.840.113549.1.1.11 sha256RSA 
Algorithmusparameter: 05 00 
... 

但是,我無法找到任何信息certutil輸出中的編碼或Windows證書查看器中的編碼(使用下面的命令打開)

"C:\Windows\system32\rundll32.exe" cryptext.dll,CryptExtOpenCER C:\temp\0104A73D4557FCE026120AC356.cer 

回答

0

X.509證書始終使用可分辨編碼規則(DER)進行編碼。

唯一的區別是如何將DER值存儲在文件中,或者是精確的二進制副本,或者是使用Base64對二進制數據進行編碼時。標準工具不會告訴使用什麼文件格式(二進制或Base64)。您可以讀取文件的第一個字節。如果它是ASCII 48,那麼該文件是證書的精確二進制副本,否則,二進制副本是base64編碼的,有或沒有PEM頭/頁腳。