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

Jac*_*cky 55 encryption cryptography rsa

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

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

Maa*_*wes 56

.pem,.cer以及.der可能包含X.509 v3证书的文件的所有文件扩展名.

DER是对构成证书的数据进行编码的方法.DER本身可以表示任何类型的数据,但通常它描述编码的证书或CMS容器.使用ASN.1数据表示语言描述证书的结构.BER和DER是ASN.1描述的数据的二进制编码方法.

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

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


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


yoA*_*ex5 7

ASN.1、DER、PEM

文件扩展名并不重要

ASN.1 <-> DER <-> PEM
Run Code Online (Sandbox Code Playgroud)
  • 抽象语法符号一 ( ASN.1 ) - 是用于描述数据结构的接口描述语言 (IDL)。广泛应用于电信、网络、密码学

  • 杰出编码规则 ( DER ) -二进制。这是ASN.1 的主要编码格式之一。它是基本编码规则 (BER) 的子集。广泛用于密码学。可以使用.der、.cer

  • 隐私增强邮件 ( PEM ) - base64编码的 DER。Base-64 的一个或多个块(例如证书链),带有纯文本页眉和页脚来标记开始和结束。主要用途用于密码学。传输二进制DER文件很困难,例如支持ASCII的邮件。您可以发现有很多带有 PEM 的文件扩展名,例如 .pem、.crt、.cer .key(用于公钥或私钥),但您不应该依赖它。您应该打开此文件并检查页眉/页脚

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
  • 公钥加密标准 #7:加密消息语法(PKCS#7:CMS)。它可以存储为DER 或 PAM。它是加密数据、经过身份验证的数据或签名数据(私钥除外)的多用途格式...它可以包含带有证书链的附加或分离签名。.p7b - 通常是 PEM,.p7s - DER 格式的签名文件

  • 公钥加密标准 #12:加密消息语法(PKCS #12:CMS)与 PKCS#7 相同,但包含私钥

PEM 格式的 PKCS #7

-----BEGIN PKCS7-----
...
-----END PKCS7-----
Run Code Online (Sandbox Code Playgroud)

分离的 PKCS#7 签名示例

数据.txt:

Hello, World!
Run Code Online (Sandbox Code Playgroud)
  1. 创建私钥和自签名证书,填写以下字段:私钥的密码短语和证书的字段
//openssl req -x509 -newkey rsa:4096 -keyout <name_for_new_private_key> -out <name_for_new_certificate> -days 365
openssl req -x509 -newkey rsa:4096 -keyout myPrivateKey -out myCert -days 365
Run Code Online (Sandbox Code Playgroud)

myPrivateKey 具有 PE​​M 格式:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIJnzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQI9Qxgmq0oK+ICAggA
...
-----END ENCRYPTED PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

myCert 具有 PE​​M 格式:

-----BEGIN CERTIFICATE-----
MIIFMjCCAxoCCQD3+UllOGhfkTANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJV
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
  1. 使用私钥短语对 data.txt 进行签名
//openssl cms -sign -signer <cert_file> -inkey <private_key_file> -binary -in <data_file> -outform [DER, PEM] -out <name_for_new_signature>
Run Code Online (Sandbox Code Playgroud)

生成 PEM 格式的数据签名

openssl cms -sign -signer myCert -inkey myPrivateKey -binary -in data.txt -outform PEM -out dataSignature
Run Code Online (Sandbox Code Playgroud)
-----BEGIN CMS-----
MIII/gYJKoZIhvcNAQcCoIII7zCCCOsCAQExDTALBglghkgBZQMEAgEwCwYJKoZI
...
-----END CMS-----
Run Code Online (Sandbox Code Playgroud)

生成 DER 格式的数据签名

openssl cms -sign -signer myCert -inkey myPrivateKey -binary -in data.txt -outform DER -out dataSignature
Run Code Online (Sandbox Code Playgroud)
3082 08fe 0609 2a86 4886 f70d 0107 02a0
...
Run Code Online (Sandbox Code Playgroud)
  1. 验证签名
//openssl cms -verify -binary -inform <PEM_or_DER_format_of_signature> -in <signature_file> -content <data_file> -noverify > /dev/null

//let's say that we generated signature in PEM format on previous step
openssl cms -verify -binary -inform PEM -in dataSignature -content data.txt -noverify > /dev/null

//Verification successful

//-noverify - Do not verify the signers certificate of a signed message
//-nointern - By default searching signing certificate inside. With this option only the certificates specified in the -certfile option are used.
Run Code Online (Sandbox Code Playgroud)

您可以查看 PKCS7

//openssl cms -cmsout -in <signature_file> -inform [PEM, DER] -noout -print
openssl cms -cmsout -in dataSignature -inform PEM -noout -print
Run Code Online (Sandbox Code Playgroud)
CMS_ContentInfo: 
  contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
  d.signedData: 
    version: 1
    digestAlgorithms:
        algorithm: sha256 (2.16.840.1.101.3.4.2.1)
        parameter: <ABSENT>
    encapContentInfo: 
      eContentType: pkcs7-data (1.2.840.113549.1.7.1)
      eContent: <ABSENT>
    certificates:
      d.certificate: 
        cert_info: 
          version: <ABSENT>
          serialNumber: 17868393695656042385
...
Run Code Online (Sandbox Code Playgroud)

ASN.1 看起来像或使用lapo.it

//openssl asn1parse -inform [PEM, DER] -i -in <(fold -w 64 <signature_file>)
openssl asn1parse -inform PEM -i -in dataSignature

//for PEM sometimes helps next command: openssl asn1parse -i -in dataSignature <(fold -w 64 dataSignature)
Run Code Online (Sandbox Code Playgroud)
  0:d=0  hl=4 l=2302 cons: SEQUENCE          
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l=2287 cons:  cont [ 0 ]        
   19:d=2  hl=4 l=2283 cons:   SEQUENCE          
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET               
   28:d=4  hl=2 l=  11 cons:     SEQUENCE          
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  11 cons:    SEQUENCE          
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=3  hl=4 l=1334 cons:    cont [ 0 ]        
   58:d=4  hl=4 l=1330 cons:     SEQUENCE          
   62:d=5  hl=4 l= 794 cons:      SEQUENCE          
   66:d=6  hl=2 l=   9 prim:       INTEGER           :F7F9496538685F91
   77:d=6  hl=2 l=  13 cons:       SEQUENCE          
   79:d=7  hl=2 l=   9 prim:        OBJECT            :sha256WithRSAEncryption
...
Run Code Online (Sandbox Code Playgroud)

[签名、证书]