Noob问题:
给定使用cfssl:创建的x509证书
server.pem
server-key.pem
发布
ca.pem
server.pem的用法有:
"server": {
...
"usages": [ "signing", "key encipherment", "server auth", "data encipherment", "s/mime" ]
...
},
我可以使用openssl:验证证书
openssl verify -CAfile ca.pem server.pem
server.pem: OK
我可以签署一个纯文本文件:
openssl dgst -sha256 -sign server-key.pem -out signable.txt.sha256 signable.txt
并验证签名
openssl x509 -pubkey -noout -in server.pem | tee server-pubkey.pem
openssl dgst -sha256 -verify server-pubkey.pem -signature signable.txt.sha256 signable.txt
Verified OK
但现在我找不到如何使用证书进行加密/解密:
尝试1
openssl smime -encrypt -aes-256-cbc -in secret.txt -out secret.txt.enc -outform DER server-key.pem
Could not read recipient certificate file from server-key.pem
4027E4F7E97F0000:error:1608010C:STORE routines:ossl_store_handle_load_result:unsupported:../crypto/store/store_result.c:151:
Unable to load recipient certificate file
尝试2
openssl smime -encrypt -aes-256-cbc -in secret.txt -out secret.txt.enc -outform DER server.pem
Error creating PKCS#7 structure
40F7A87F027F0000:error:10800096:PKCS7 routines:PKCS7_RECIP_INFO_set:encryption not supported for this key type:../crypto/pkcs7/pk7_lib.c:637:
40F7A87F027F0000:error:10800078:PKCS7 routines:PKCS7_encrypt_ex:error adding recipient:../crypto/pkcs7/pk7_smime.c:467:
尝试3
cat server.pem server-key.pem > server.pkcs12
openssl smime -encrypt -aes-256-cbc -in secret.txt -out secret.txt.enc -outform DER server.pkcs12
Error creating PKCS#7 structure
40C7B2B9947F0000:error:10800096:PKCS7 routines:PKCS7_RECIP_INFO_set:encryption not supported for this key type:../crypto/pkcs7/pk7_lib.c:637:
40C7B2B9947F0000:error:10800078:PKCS7 routines:PKCS7_encrypt_ex:error adding recipient:../crypto/pkcs7/pk7_smime.c:467:
有线索吗?
-
Meta:这与编程或开发无关,超出了StackOverflow的范围。然而,我无法将以下内容放入可读的评论中。如有需要,我会删除以结束或删除该问题。
-
执行CCD_ 1并查看线CCD_。如果它说
dsaEncryption
(可怕的名字BTW(或rsassaPss
,你不能用这个证书(和密钥(加密;这些算法不支持加密。*如果它说id-ecPublicKey
,smime
命令(正如你在错误消息中看到的那样,它实际上是PKCS7(不能使用它来加密,但cms
命令可以——这是PKCS7和CMS之间为数不多的区别之一(添加了KeyAgreeRecipInfo选项,又名KARI(。
*DSA是在上个世纪设计的,专门用于防止加密,以允许其使用,而不考虑当时美国法律禁止出口加密"技术"。也不考虑Schnorr的专利要求,但这是一个更复杂的故事。尽管RSA(以及普通RSA密钥(通常可用于签名和加密,但PSS(概率签名方案(变体仅用于签名。有一个类似的变体OAEP(最优非对称加密填充(用于加密,但它不像PSS那样在证书中使用不同的算法标识符。
-
要在任何PKCS7/CMS/SSMIME中加密,您只需要证书,而不需要私钥。(从技术上讲,要在任何PKC中加密,您都需要公钥,但PKCS7/CMS/SSMIME除了公钥之外,还使用证书中的其他数据。(您通常需要私钥和证书来解密。
-
连接两个PEM文件不会创建PKCS12文件,命名这样的文件
.pkcs12
对人类来说是令人困惑、误导和欺骗性的——尽管程序忽略了它