温馨提示×

怎样用linux openssl签名

小樊
39
2026-10-10 11:17:09
栏目: 云计算

下面给你一个从生成密钥到用 OpenSSL 在 Linux 下签名(及验证)的完整示例,适用于文件签名 / 代码签名 / 数据完整性校验等常见场景。


一、生成密钥对(RSA 示例)

1. 生成私钥

openssl genrsa -out private.key 2048

2. 从私钥导出公钥

openssl rsa -in private.key -pubout -out public.key

二、对文件进行签名

假设要签名的文件是 data.txt

方法 1:直接签名(推荐,简单)

openssl pkeyutl -sign \
  -inkey private.key \
  -in data.txt \
  -out data.sig

生成:

  • data.sig:二进制签名文件

方法 2:先哈希再签名(更常见、更安全)

openssl dgst -sha256 -sign private.key -out data.sig data.txt

✅ 这是最常用方式


三、验证签名

使用公钥验证

openssl dgst -sha256 -verify public.key -signature data.sig data.txt

成功输出:

Verified OK

失败输出:

Verification Failure

四、查看签名内容(可选)

openssl base64 -in data.sig

或转成 base64 存储:

openssl dgst -sha256 -sign private.key data.txt | base64 > data.sig.b64

五、使用 ECC(更高效,现代推荐)

生成 ECC 密钥

openssl ecparam -genkey -name prime256v1 -noout -out ecc.key
openssl ec -in ecc.key -pubout -out ecc.pub

签名 & 验证

openssl dgst -sha256 -sign ecc.key -out data.sig data.txt
openssl dgst -sha256 -verify ecc.pub -signature data.sig data.txt

六、常见注意点

  • ❌ 不要直接对大文件 pkeyutl -encrypt
  • ✅ 签名 = 哈希 + 私钥加密
  • ✅ 验证 = 公钥 + 哈希比对
  • 私钥永远不要公开

如果你有具体用途(如:

  • 给 APK / RPM 签名
  • HTTPS 证书
  • 固件签名
  • SM2 国密 )

可以告诉我,我给你更针对性的命令。

0 踩