使用cfssl和openssl使用x509证书对文件进行加密



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:

有线索吗?

  1. Meta:这与编程或开发无关,超出了StackOverflow的范围。然而,我无法将以下内容放入可读的评论中。如有需要,我会删除以结束或删除该问题。

  2. 执行CCD_ 1并查看线CCD_。如果它说dsaEncryption(可怕的名字BTW(或rsassaPss,你不能用这个证书(和密钥(加密;这些算法不支持加密。*如果它说id-ecPublicKeysmime命令(正如你在错误消息中看到的那样,它实际上是PKCS7(不能使用它来加密,但cms命令可以——这是PKCS7和CMS之间为数不多的区别之一(添加了KeyAgreeRecipInfo选项,又名KARI(。

*DSA是在上个世纪设计的,专门用于防止加密,以允许其使用,而不考虑当时美国法律禁止出口加密"技术"。也不考虑Schnorr的专利要求,但这是一个更复杂的故事。尽管RSA(以及普通RSA密钥(通常可用于签名和加密,但PSS(概率签名方案(变体仅用于签名。有一个类似的变体OAEP(最优非对称加密填充(用于加密,但它不像PSS那样在证书中使用不同的算法标识符。

  1. 要在任何PKCS7/CMS/SSMIME中加密,您只需要证书,而不需要私钥。(从技术上讲,要在任何PKC中加密,您都需要公钥,但PKCS7/CMS/SSMIME除了公钥之外,还使用证书中的其他数据。(您通常需要私钥证书来解密

  2. 连接两个PEM文件不会创建PKCS12文件,命名这样的文件.pkcs12对人类来说是令人困惑、误导和欺骗性的——尽管程序忽略了它

最新更新