You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从含内置密钥的.cer文件执行OpenSSL SMIME签名命令?

使用内置密钥的.cer文件执行OpenSSL SMIME签名的解决方案

原用于字符串签名的OpenSSL命令:

openssl smime -sign -signer cert.crt -inkey key.key -engine gost -binary -noattr

现有一个声称内置密钥的.cer文件,以下是针对你提出的两种方案的具体实现:


方案1:修改命令直接使用文件内置密钥

首先明确:标准X.509格式的.cer证书仅包含公钥,不可能内置私钥。如果该文件实际是PKCS#12格式(常以.pfx/.p12为扩展名,包含证书+私钥)但被错误命名为.cer,可直接用以下命令签名:

openssl smime -sign -signer cert.cer -inkey cert.cer -engine gost -binary -noattr -passin pass:你的文件密码
  • 若OpenSSL无法识别文件格式,可添加-certform P12参数强制指定为PKCS#12格式
  • PKCS#12文件默认有密码保护,必须用-passin指定解锁密码

方案2:转换格式并提取私钥(复用原命令)

如果要拆分出.crt证书和.key私钥文件,执行以下步骤:

  1. 提取证书(生成.crt文件):
openssl pkcs12 -in cert.cer -nokeys -out cert.crt -passin pass:你的文件密码
  1. 提取私钥(生成.key文件):
# 生成带密码保护的私钥
openssl pkcs12 -in cert.cer -nocerts -out key.key -passin pass:你的文件密码 -passout pass:私钥保护密码

# 生成无密码的私钥(无需输入密码即可使用)
openssl pkcs12 -in cert.cer -nocerts -out key.key -passin pass:你的文件密码 -nodes

拆分完成后,即可直接使用你原来的签名命令。


关于你提供的.cer文件内容说明

你通过openssl x509 -in cert.cer -noout -text查看的输出显示这是一个X.509证书,但出现Unable to load Public Key错误,原因是OpenSSL的GOST引擎未正确配置,不支持证书使用的GOST R 34.10-2012算法。需先确保GOST引擎正常加载:

openssl engine gost

若命令无法输出GOST引擎信息,需重新安装或配置支持GOST算法的OpenSSL版本。

再次强调:标准X.509证书(.cer/.crt)不可能包含私钥,若该文件确为纯证书,你必须找到对应的私钥文件才能完成签名。

内容的提问来源于stack exchange,提问作者Nick Farsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:31:07