OpenSSL DSA 签名命令详解
使用 OpenSSL 命令行工具基于 DSA 算法生成数字签名的基本语法如下:
openssl> dgst -dss1 -sign C.pri -out signature.bin s.txt
参数说明
- C.pri:DSA 算法生成的私钥文件。
- s.txt:待签名的原文(明文)文件。
- signature.bin:生成的二进制签名文件。
- -dss1:指定使用 DSS1(即 SHA1)作为摘要算法。DSA 密钥必须搭配 SHA1/DSS1 使用。
PHP 查看签名内容
生成的 signature.bin 为二进制数据,可通过 PHP 转为十六进制查看:
<?php
echo bin2hex(file_get_contents('signature.bin'));
?>
消息摘要算法补充知识
支持的算法
OpenSSL 支持:MD2, MD4, MD5, MDC2, SHA1(常称 DSS1), RIPEMD-160。其中 SHA1 和 RIPEMD-160 产生 160 位哈希值,其余为 128 位。除兼容性需求外,推荐使用 SHA1 或 RIPEMD-160。
算法调用差异
- 除 RIPEMD-160 需用
rmd160 命令外,其他算法均可用 dgst 命令执行。
- OpenSSL 对 SHA1 处理特殊:有时必须称作
DSS1 来引用(特别是 DSA 签名时)。
签名与验签的算法搭配规则
- DSA 私钥:必须搭配 DSS1(SHA1)使用。
- RSA 私钥:可搭配任意消息摘要算法。
常用 OpenSSL 签名/验签示例
| 操作 | 命令示例 |
| SHA1 计算文件哈希(输出到标准输出) | openssl dgst -sha1 file.txt
| SHA1 计算哈希并输出到文件 | openssl sha1 -out digest.txt file.txt
| DSS1 为文件签名(DSA 私钥) | openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt
| DSS1 验证签名(DSA 公钥) | openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt
| SHA1 为文件签名(RSA 私钥) | openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt
| SHA1 验证签名(RSA 公钥) | openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
最佳实践提示
- 生产环境建议使用 SHA256 等更强算法(需 OpenSSL 1.0.0+),并通过
-sha256 参数指定。
- 私钥文件权限应设为
600,防止泄露。
- 签名前务必确认原文完整性(如通过校验和)。