首页/网络/协议速查/openssl 命令速查

openssl 命令速查

一个工具覆盖证书、密钥、摘要、加解密、协议测试:把高频命令背下来,排 TLS 问题基本不用搜索引擎。

协议速查网络更新于 2026-10-13

一个工具覆盖证书与协议

openssl 命令行把证书处理、密钥管理、摘要、加解密与 TLS 协议测试集中在一起:看证书内容用 x509,生成私钥与 CSR 用 req,算摘要用 dgst,取随机数用 rand,诊断 TLS 连通性用 s_client。排查证书过期、链不完整、握手失败这类问题时,它几乎是最不需要联网、也最不会误导结论的工具。

证书与密钥

证书与密钥
openssl x509 -in cert.pem -noout -text -dates -subject      # 看主体、有效期与扩展
openssl x509 -in cert.pem -noout -ext subjectAltName         # 只看 SAN 里有哪些域名
openssl req -new -newkey rsa:2048 -nodes -keyout k.pem -out c.csr -subj "/CN=example.com"   # 生成私钥与 CSR
openssl rsa -in k.pem -check                                  # 校验私钥完整性
openssl pkcs12 -export -in cert.pem -inkey k.pem -out bundle.p12   # 转成 p12 供 Windows 或 Java 使用
openssl x509 -in cert.pem -noout -fingerprint -sha256         # 指纹,用于与配置里的证书核对

协议与连接

协议与连接
openssl s_client -connect h:443 -servername h -showcerts -status </dev/null   # 链与 OCSP 一起看
openssl s_client -connect h:443 -tls1_3 -brief </dev/null                       # 只看协商结果
openssl s_client -connect h:443 -servername h -CAfile /etc/ssl/certs/ca-certificates.crt </dev/null 2>&1 | grep -i verify
openssl ciphers -v 'ECDHE+AESGCM:CHACHA20'                                      # 看套件是否被当前版本支持
openssl s_client -connect h:443 -servername h -keylogfile sslkey.log </dev/null  # 导出密钥供本地抓包解密

摘要与随机

摘要与随机
openssl dgst -sha256 file              # 算文件摘要,与发布方公布的指纹比对
openssl dgst -sha256 -r file            # 只输出摘要值,便于脚本处理
openssl rand -hex 16                    # 生成 16 字节随机数的十六进制串
echo -n 'hello' | openssl dgst -sha256 -hmac secret   # HMAC 摘要
openssl speed -evp aes-128-gcm          # 粗略测本机加解密性能

x509 -text 输出读法

字段含义怎么看
Subject 与 Issuer证书主体与签发者核对域名与 CA 是否符合预期
ValidityNot Before 与 Not After对照系统时间,注意时区与时钟偏差
Subject Alternative Name实际生效的域名列表浏览器匹配以此为准,CN 已不参与匹配
Public Key Algorithm 与 Key Size公钥算法与长度RSA 建议 2048 位及以上
Signature Algorithm签名算法应使用 SHA-256 及以上,出现 SHA-1 需更换
X509v3 扩展Key Usage 与 Extended Key Usage 等用途约束用途不符时客户端会直接拒绝
OpenSSL 1.1.1 与 3.x 的参数存在差异,例如 ciphersuites 只影响 TLS 1.3;遇到 unknown option 先执行 openssl version -a 确认版本与编译选项。
处理证书链时的常用组合:先用 s_client 把服务端下发的整条链导出到文件,再用 crl2pkcs7 与 pkcs7 把链里的证书逐个拆成 PEM,然后对每一张执行 x509 的 subject 与 issuer 查看,就能看清中间证书是否齐全、顺序是否正确、以及链里有没有夹带多余证书。排查跨设备行为不一致的问题,这一步往往比反复重启服务有效得多。

易错点

  • 直接抄老博客里的命令却在 3.x 上执行失败,其实只是版本差异,先确认版本再查参数
  • 用 openssl x509 看证书不生效却没检查 SAN,现代客户端只认 SAN 不认 CN,结论会完全相反
  • 把私钥与证书一起用明文管道传递或写进脚本参数,私钥进入命令历史与日志,运维痕迹即泄漏面
  • 只看证书本身不看证书链,缺少中间证书时 openssl 单看叶证书一切正常,线上却在部分设备失败

数据来源与参考

  • OpenSSL 官方文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌