2016-02-24 57 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头/页脚。