ssl - 在 SSL 中解析 ServerKeyExchange 消息

标签 ssl tls1.2

我正在构建一个 Java 解析器来读取和处理 SSL 握手消息。每ietf spec ,ServerKeyExchange消息表示如下:

struct {
      select (KeyExchangeAlgorithm) {
          case dh_anon:
              ServerDHParams params;
          case dhe_dss:
          case dhe_rsa:
              ServerDHParams params;
              digitally-signed struct {
                  opaque client_random[32];
                  opaque server_random[32];
                  ServerDHParams params;
              } signed_params;
          case rsa:
          case dh_dss:
          case dh_rsa:
              struct {} ;
             /* message is omitted for rsa, dh_dss, and dh_rsa */
          /* may be extended, e.g., for ECDH -- see [TLSECC] */
      };
  } ServerKeyExchange;

..而 ServerDHParams 定义如下:

struct {
   opaque dh_p<1..2^16-1>;
   opaque dh_g<1..2^16-1>;
   opaque dh_Ys<1..2^16-1>;
} ServerDHParams;     /* Ephemeral DH parameters */

现在,当我使用 wireshark 查看包含服务器 key 交换实例的示例跟踪时,我看到一种不符合上述定义的格式:

Screenshot from wireshark

如何使用 ietf 定义来解析这样的服务器 key 交换消息?

最佳答案

他们都是对的。 DHE 和 ECDHE 是不同的算法。 RFC 5246 中的结构定义指定了 DHE 的消息格式,而在 Wireshark 中,您看到的是 ECDHE key 交换。对于 ECDHE,您可以在 RFC 4492 中找到它的定义。 ,这与您在 WireShark 中看到的相同:

ec_diffie_hellman: Indicates the ServerKeyExchange message contains an ECDH public key.

    select (KeyExchangeAlgorithm) {
        case ec_diffie_hellman:
            ServerECDHParams    params;
            Signature           signed_params;
    } ServerKeyExchange;

    struct {
        ECParameters    curve_params;
        ECPoint         public;
    } ServerECDHParams;

关于ssl - 在 SSL 中解析 ServerKeyExchange 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191226/

相关文章:

javascript - 如何让用户通过我的自定义域访问 amazon s3 html/javascript 页面?

ssl - 无法访问 Https 站点 Windows Server IIS

amazon-web-services - 让加密入口 - NewOrder 请求不包含足够短以适合 CN 的 SAN

python - 请求.exceptions.SSLError : [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl. c:590)

https - 在 Mule 3.5 中为 HTTPS 设置 TLS 1.2

c# - .Net 程序未获得经过验证的服务器证书

c - 如果我想用非阻塞套接字调用 SSL_shutdown(),我是否需要先继续调用 SSL_read() 直到它产生 SSL_ERROR_WANT_READ?

java - 为什么需要安装中间CA

当浏览器在服务级别启动时,Applet 调用的 Java 运行时不会观察所有 JRE 配置

node.js - 需要 SSL 连接。请指定 SSL 选项并重试