.pem,.cer和.der之间有什么区别?

时间:2014-03-30 11:27:56

标签: encryption cryptography rsa

.pem.cer.der之间有什么区别?

据我所知,.cer包含公钥。是否有任何开放式框架可用于使用此公钥加密我的数据?

1 个答案:

答案 0 :(得分:49)

.pem.cer.der都是可能包含X.509 v3证书的文件的文件扩展名。

.der扩展名

DER是对构成证书的数据进行编码的方法。 DER本身可以代表任何类型的数据,但通常它描述了编码证书或CMS容器。

使用ASN.1数据表示语言描述证书的结构。 BER和DER是ASN.1描述的数据的二进制编码方法。

.pem扩展名

PEM是一种将二进制数据编码为字符串(ASCII装甲)的方法。它包含页眉和页脚行(指定编码的数据类型,如果数据链接在一起则显示开始/结束),中间的数据是基本64数据。在它对证书进行编码的情况下,它将仅包含DER证书的基本64编码。 PEM代表Privacy Enhanced Mail; mail不能直接包含未编码的二进制值,如DER。

PEM还可以编码/保护与证书相关的其他类型的数据,例如公钥/私钥,证书请求等。如果内容是通用的X509v3证书,则PEM编码为:

-----BEGIN CERTIFICATE-----
... base 64 encoding of the DER encoded certificate
    with line endings and padding with equals signs ...
-----END CERTIFICATE-----

请注意,PEM文件还可能包含完整的证书链,其中链以服务的leaf / end证书开头,后跟签名的证书,通常最多但不包括受信任的根证书。因此,如果您缺少证书,您可能需要查看第一个证书。

.cer.crt扩展名

.cer仅代表证书。它通常是DER编码数据,但Windows也可以接受PEM编码数据。您需要查看内容(例如,在posix系统上使用file实用程序),以查看文件中的内容是100%确定的。

其他OpenSSL格式

请查看this answer以获取更详尽的OpenSSL支持列表。


要使用证书中的公共密钥 (并且通过证书中的签名进行签名),您应该使用任何解析X.509证书并执行RSA的库加密。您可以使用检测/处理PEM编码的工具,或者您可以通过剥离PEM编码将证书转换为DER。

OpenSSL命令行包含许多用于在PEM和DER之间进行转换的选项,打印出高级证书信息或解析ASN.1以获得其中的内容的低级视图。

详细

与大多数ASN.1结构一样,DER编码证书始终以字节30开始,这是ASN.1 SEQUENCE的标记编码。如果你在文件中看到很多重复,那么这是可以的;它只是严格定义的结构

同样,PEM编码文件中的基数64总是从字母M开始,因为ASN.1 SEQUENCE以字节30开始,所以前6位是001100,它转换为数字12,即字母M的索引,即字母表的第13个字母。