Skip to content

openssl 查证书

看远端证书

bash
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

-servername 必须带,不带的话 SNI 为空,很多服务器返回默认证书或者直接拒绝。</dev/null 让它握手完就退出,不然会等输入。

只看过期时间

bash
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -enddate

看握手用了什么

bash
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>&1 \
  | grep -E 'Protocol|Cipher|subject'

-tls1_3 强制用 1.3,握不上说明服务端不支持。

看本地证书文件

bash
openssl x509 -in fullchain.pem -noout -text        # 全部信息
openssl x509 -in fullchain.pem -noout -dates
openssl x509 -in fullchain.pem -noout -ext subjectAltName   # 证书覆盖哪些域名

证书和私钥是不是一对

bash
openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum
# 两个 md5 一样就是一对(RSA)

ECDSA 证书用 openssl pkey -in key.pem -puboutopenssl x509 -in cert.pem -pubkey -noout 比公钥。

测某个端口是不是 TLS

bash
openssl s_client -connect 127.0.0.1:8443 </dev/null 2>&1 | head -5

能看到 CONNECTED 然后有证书信息就是 TLS 端口;wrong version number 说明那是明文端口。

个人笔记,写给未来忘事的自己。