0%

某 HTTPS 链接无法正常播放

某个 https 无法播放,通过抓包来分析问题

抓包数据

https(ssl)协议以及 wireshark 抓包分析与解密

ClientHello

ClientHello

ServerHello

ServerHello

ServerHello 可以看到服务器使用 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 加密套件

加密套件

TLS/SSL 协议详解 (20) 加密套件的选择

  1. 服务器选择算法时有两种优先级:客户端优先或服务器优先。客户端优先是根据客户端提供的加密套件,从上到下,看是否有本地支持的;服务器优先是根据自身配置的加密套件顺序,一个个在 client hello 中找
  2. 服务器配置 ECC 证书 时,加密套件只能选择 XXX_ECDSA_XXX 或者 ECDH_XXX
  3. 服务器配置 RSA 证书 时,只能选择 RSA_XXX 或者 ECDHE_RSA_XXX 形式的加密套件
  4. 如果加密套件选择 ECDH_RSA 或者 ECDH_ECDSA 时,由于 ECDH 加密套件 默认表明了握手需要 ECC 证书,第二部分 _RSA_ECDSA 表明的是想要的服务器证书签名类型

wolfssl

wolfssl

加密套件 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384

名词解释:

  1. ECDH 是基于 ECC (Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看 ECC)的 DH ( Diffie-Hellman)密钥交换算法
  2. RSA 是一种非对称加密算法
  3. AES256
  4. GCM
  5. SHA384

wolfssl 源码中搜索

$ag TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
src/keys.c
739:#ifdef BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
740:    case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 :

$ag BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
wolfssl/internal.h
486:                            #define BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384

打开文件 wolfssl/internal.h 可以查到 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 依赖于 WOLFSSL_STATIC_DHWOLFSSL_SHA384HAVE_AESGCMHAVE_ECC

定义以上几个依赖宏定义以支持相关加密套件

$ ./autogen.sh
$ ./configure --enable-opensslextra --enable-des3 --enable-dh --enable-ecc --enable-dtls --enable-aesgcm --enable-aesccm --enable-sha512

Ref

  1. 关于 ECDSA/ECC(密钥加密传输)和 ECDSA/ECDH(密钥磋商)
  2. [Getting started with wolfSSL`s ECC](https://www.wolfssl.com/getting-started-with-wolfssls-ecc-2/)