我正在构建一个 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 交换实例的示例跟踪时,我看到一种不符合上述定义的格式:
如何使用 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/