在 Linux 下使用 OpenSSL 进行签名,通常分为 RSA / ECDSA 等非对称签名 和 对文件做数字签名 两类场景。下面按常见用法一步步说明。
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
openssl dgst -sha256 -sign private.key -out file.sig file.txt
file.txt:原始文件file.sig:生成的签名文件(二进制)openssl dgst -sha256 -verify public.key -signature file.sig file.txt
输出:
Verified OK
openssl ecparam -genkey -name prime256v1 -out ec.key
openssl ec -in ec.key -pubout -out ec.pub
openssl dgst -sha256 -sign ec.key -out file.sig file.txt
openssl dgst -sha256 -verify ec.pub -signature file.sig file.txt
有些场景需要文本格式签名:
openssl dgst -sha256 -sign private.key file.txt | base64 > file.sig.b64
验证时先解码:
base64 -d file.sig.b64 > file.sig
openssl dgst -sha256 -verify public.key -signature file.sig file.txt
openssl dgst -sha256 file.txt
# 得到 hash 值后手动签名(不常用)
❌ 直接用 rsautl 签大文件(不推荐)
✅ 始终使用 dgst -sign
如果你有 具体场景(如:JWT、HTTPS 证书、API 签名、SSH、PKCS#7、CMS),可以告诉我,我可以给更针对性的示例。