c# System.Security.Cryptography.X509Certificates.X509ContentType.Cert 这是 DER 吗?

标签 c# x509certificate

我如何确定我导出的证书文件是 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/

相关文章:

javascript - 使用 java 脚本在 MVC 中提供用户友好的 URL

c++ - 如何读取 USB token 上存储的 X.509 证书的详细信息?

android - 如何在 Android 中实现叶/中间证书固定?

c# - 如何使用超时取消 TaskCompletionSource

c# - 保持数字长于 64 位长

java HttpsURLConnection 和发送客户端证书

powershell - 加密证书必须包含数据加密或 key 加密

java - Android 7.1.1 SSLHandShakeException 连接被对端关闭

c# - 使用 C# 安装 MySQL 实例(和架构)

c# - 加载后删除程序集