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 -pubout 和 openssl 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 说明那是明文端口。

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