我如何确定我导出的证书文件是 DER 编码的? 有没有办法检查文件?
我可以将加载到内存中的证书导出到文件
string strFilename = _rksvpath + cert.GetSerialNumberString() + ".cer";
byte[] bytesCertExport = cert.Export(System.Security.Cryptography.X509Certificates.X509ContentType.Cert);
File.WriteAllBytes(strFilename, bytesCertExport);
文件没问题,我可以用 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
最佳答案
X.509 证书始终使用可分辨编码规则 (DER) 进行编码。
唯一的区别是 DER 值在文件中的存储方式,可以是精确的二进制副本,也可以是使用 Base64 对二进制数据进行编码。标准工具不会告诉您使用什么文件格式(二进制或 Base64)。您可以读取文件的第一个字节。如果它是 ASCII 48,则文件是证书的精确二进制副本,否则,二进制副本是 base64 编码的,有或没有 PEM 页眉/页脚。
关于c# System.Security.Cryptography.X509Certificates.X509ContentType.Cert 这是 DER 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599268/