首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用cfssl和openssl加密x509证书来加密文件

用cfssl和openssl加密x509证书来加密文件
EN

Stack Overflow用户
提问于 2022-07-22 06:31:25
回答 1查看 196关注 0票数 0

努布问题:

给定用cfssl创建的x509证书:

代码语言:javascript
运行
复制
server.pem
server-key.pem

代码语言:javascript
运行
复制
ca.pem

server.pem的用法如下:

代码语言:javascript
运行
复制
"server": {
  ...
  "usages": [ "signing", "key encipherment", "server auth", "data encipherment", "s/mime" ]
  ...
},

我能够用openssl验证证书:

代码语言:javascript
运行
复制
openssl verify -CAfile ca.pem server.pem
server.pem: OK

我能够签署一个纯文本文件:

代码语言:javascript
运行
复制
openssl dgst -sha256 -sign server-key.pem -out signable.txt.sha256 signable.txt

并验证签名

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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:

有线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 08:28:37

  1. Meta:这与编程或开发无关,并且超出了StackOverflow的范围。但是,我无法在可读的注释中加入以下内容。如有必要,我将删除以关闭或删除该问题。

  1. do openssl x509 -in server.pem -text -noout并查看Public Key Algorithm行。如果它说dsaEncryption (可怕的名字BTW)或rsassaPss,你不能用这个证书(和密钥)加密;这些算法不支持加密。*如果它说id-ecPublicKey smime命令(正如您在错误消息中看到的那样,实际上是PKCS7)不能使用它加密,但是cms命令可以--这是PKCS7和CMS之间为数不多的区别之一(添加了KeyAgreeRecipInfo选择符KARI)。

* DSA是在本世纪初专门设计的,目的是防止加密技术的使用,而不考虑当时的法律禁止从美国输出加密技术。也不考虑施诺尔的专利主张,但这是一个更复杂的故事。虽然RSA (和普通RSA密钥)一般都可以用于签名和加密,但PSS (概率签名方案)变体仅用于签名。有一个类似的变体OAEP (最优非对称加密填充)用于加密,但它不像PSS那样在证书中使用不同的算法标识符。

要在PKCS7 7/CMS/SMIME中进行加密,

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

  1. Concatenating两个PEM文件不会创建PKCS12文件,而命名这样的文件对人类来说是令人困惑、误导和欺骗的--尽管程序忽略了它。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73075991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档