在 Linux 下使用 OpenSSL 调试网络连接,常见场景包括:
下面按常用方法和示例说明。
openssl s_client -connect example.com:443
看到的信息包括:
按 Ctrl+C 或输入 Q 退出。
openssl s_client -connect example.com:443 -servername example.com -showcerts
说明:
-servername:指定 SNI(虚拟主机很重要)-showcerts:显示完整证书链openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3
可用版本:
-ssl3(一般不推荐)-tls1-tls1_1-tls1_2-tls1_3openssl s_client -connect example.com:443 -debug
或更详细的:
openssl s_client -connect example.com:443 -state -debug
-state:显示握手状态-debug:显示原始字节openssl s_client -connect example.com:443 -verify_return_error
或:
openssl s_client -connect example.com:443 -CApath /etc/ssl/certs
openssl s_client -connect example.com:443 -servername example.com
连接成功后输入:
GET / HTTP/1.1
Host: example.com
Connection: close
(结尾空行不能少)
openssl s_client -connect mail.example.com:25 -starttls smtp
openssl s_client -connect imap.example.com:143 -starttls imap
openssl s_client -connect pop.example.com:110 -starttls pop3
openssl s_client -connect db.example.com:3306
openssl x509 -in cert.pem -text -noout
openssl rsa -in key.pem -check
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
两个 md5 应一致。
telnet example.com 443
# 或
nc -vz example.com 443
ls /etc/ssl/certs
openssl s_client -connect example.com:443 -CAfile ca.pem
未加 -servername 可能导致:
tcpdump -i any -w tls.pcap host example.com and port 443
再用 Wireshark 分析 TLS 握手。
如果你有具体场景(如 Nginx、MySQL、Kubernetes、自签名证书),可以告诉我,我可以给更针对性的调试命令。