排查 TLS 会话问题

排查 TLS 会话问题

使用 openssl

  1. 使用 openssl s_client 命令,可以指定 tls 协议的版本,不同的加密算法套件,来验证服务器对 ssl 协议的支持情况
  2. 如果服务器不支持某些加密算法套件,则会提示,Secure Renegotiation IS NOT supported;如果会话建立成功,则会显示完整的 ssl 会话信息,如 ssl 版本,加密套件,预主密钥,会话 key 等信息
  3. 示例:openssl s_client -connect www.qingcloud.com:443 -tls1_2 -cipher RC4
    1. -connect 指定服务器
    2. -cipher 指定加密套件,参看 man ciphers
    3. -tls1, tls1_1, tls_1_2, tls1_3 用于指定 ssl 协议的版本,具体参看 man s_client
    4. 由于 ssl 证书一般是签发给指定的域名的,因此需要以域名的方式来访问服务器,可以在 /etc/hosts 中构造 服务器ip 和 域名的对应关系
    5. 推荐使用 openssl 来验证,协议相关的参数比较丰富

使用 curl

  1. curl 使用不同的 ssl 协议实现 编译,那么支持的参数,依赖于具体的实现
    示例:curl -v --cacert /usr/local/etc/certs/sc-rxhcmaaj --tlsv1.0 --ciphers RC4 https://www.qingcloud.com

    1. --cacert 指定认证服务器端证书是,使用的证书,一般就是 服务器端注册的证书;当然也可以使用 --insecure 来忽略对服务器端证书的认证
      1. --tlsv1.0, --tlsv1.1, --tlsv1.2 用于指定 ssl 协议的版本,–tls_max 用于指定最高支持的 ssl 协议版本
    2. --tlsv1 是指 tls1.0 及以上的版本,这个选项可能会造成误导,最终的协议建立,可能使用的是 tls 1.2
  2. 如果不支持对应的加密套件,则会忽略指定的 --ciphers 参数,需要使用 openssl ciphers/gnutls -l 来验证当前软件实现支持的加密套件

使用 gnutls

  1. ubuntu16.04 需要安装 gnutls-bin,其余未验证
  2. 语法比较奇怪,后面有空再补上
原文地址:https://www.cnblogs.com/zhedan/p/14247513.html