一个工具覆盖证书与协议
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 是否符合预期 |
| Validity | Not 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 查看,就能看清中间证书是否齐全、顺序是否正确、以及链里有没有夹带多余证书。排查跨设备行为不一致的问题,这一步往往比反复重启服务有效得多。