排查 TLS 会话问题
排查 TLS 会话问题
使用 openssl
- 使用 openssl s_client 命令,可以指定 tls 协议的版本,不同的加密算法套件,来验证服务器对 ssl 协议的支持情况
- 如果服务器不支持某些加密算法套件,则会提示,Secure Renegotiation IS NOT supported;如果会话建立成功,则会显示完整的 ssl 会话信息,如 ssl 版本,加密套件,预主密钥,会话 key 等信息
- 示例:
openssl s_client -connect www.qingcloud.com:443 -tls1_2 -cipher RC4
- -connect 指定服务器
- -cipher 指定加密套件,参看 man ciphers
- -tls1, tls1_1, tls_1_2, tls1_3 用于指定 ssl 协议的版本,具体参看 man s_client
- 由于 ssl 证书一般是签发给指定的域名的,因此需要以域名的方式来访问服务器,可以在 /etc/hosts 中构造 服务器ip 和 域名的对应关系
- 推荐使用 openssl 来验证,协议相关的参数比较丰富
使用 curl
-
curl 使用不同的 ssl 协议实现 编译,那么支持的参数,依赖于具体的实现
示例:curl -v --cacert /usr/local/etc/certs/sc-rxhcmaaj --tlsv1.0 --ciphers RC4 https://www.qingcloud.com
- --cacert 指定认证服务器端证书是,使用的证书,一般就是 服务器端注册的证书;当然也可以使用 --insecure 来忽略对服务器端证书的认证
-
- --tlsv1.0, --tlsv1.1, --tlsv1.2 用于指定 ssl 协议的版本,–tls_max 用于指定最高支持的 ssl 协议版本
- --tlsv1 是指 tls1.0 及以上的版本,这个选项可能会造成误导,最终的协议建立,可能使用的是 tls 1.2
-
如果不支持对应的加密套件,则会忽略指定的 --ciphers 参数,需要使用 openssl ciphers/gnutls -l 来验证当前软件实现支持的加密套件
使用 gnutls
- ubuntu16.04 需要安装 gnutls-bin,其余未验证
- 语法比较奇怪,后面有空再补上
聚沙成塔 滴水石穿