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.
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)
//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 具有 PEM 格式:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIJnzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQI9Qxgmq0oK+ICAggA
...
-----END ENCRYPTED PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
myCert 具有 PEM 格式:
-----BEGIN CERTIFICATE-----
MIIFMjCCAxoCCQD3+UllOGhfkTANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJV
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
//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)
//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)
归档时间: |
|
查看次数: |
35477 次 |
最近记录: |