C 设计EAP-TLS客户端hello消息

C 设计EAP-TLS客户端hello消息,c,networking,ssl,wireshark,C,Networking,Ssl,Wireshark,我正在尝试设计第一个发起EAP-TLS握手的数据包。这是我的数据包当前的样子: 我设计的EAP part是通过在C中手动填充一个缓冲区来实现的。TLS第一部分使用OpenSSL派生,如图所示。然后我转到并在数据包中添加了4个八位字节长度字段和TLS标志。但wireshark拒绝接受!我尝试将TLS数据逐字节与TCP上发生的TLS连接进行比较,我可以看到客户机hello(16进制)、TLS版本(0x0301:TLS 1.0)的字段顺序相同。你能帮我找出哪里出了问题吗?非常感谢。此外,如果有人知道

我正在尝试设计第一个发起EAP-TLS握手的数据包。这是我的数据包当前的样子:


我设计的EAP part是通过在C中手动填充一个缓冲区来实现的。TLS第一部分使用OpenSSL派生,如图所示。然后我转到并在数据包中添加了4个八位字节长度字段和TLS标志。但wireshark拒绝接受!我尝试将TLS数据逐字节与TCP上发生的TLS连接进行比较,我可以看到客户机hello(16进制)、TLS版本(0x0301:TLS 1.0)的字段顺序相同。你能帮我找出哪里出了问题吗?非常感谢。此外,如果有人知道一个客户端可以生成这些消息,这样我就可以比较它们,这也将是有益的。谢谢

您的802.1X报头显示数据包为227字节。您有199个突出显示的字节和28个未突出显示的字节,因此总计为227个。好

所以,如果您的整个数据包是227字节,那么您的EAP头肯定会小于这个值。除了您的EAP头说EAP数据也是227字节之外

您的EAP头应该如下所示:

+------+------+------------+------+----
| code |  ID  |   length   | type | data ...
+------+------+------------+------+----
 1 byte 1 byte    2 bytes   1 byte  n bytes
说:

长度

  The Length field is two octets and indicates the length of the EAP
  packet including the Code, Identifier, Length, Type, and Data
  fields.  Octets outside the range of the Length field should be
  treated as Data Link Layer padding and should be ignored on
  reception.
因此,长度是从
code
开始到数据包末尾的字节数,在本例中,我认为是
227-18=209

接着,我们看到消息类型是13,因此它是一个EAP-TLS数据包。我看到
S
位没有设置,这意味着这个数据包是一个片段确认。对吗?(可能不会,但只有你知道)

这是一点 (EAP-TLS启动)在EAP-TLS启动消息中设置。这 区分EAP-TLS启动消息和片段 感谢

获取EAP-TLS长度,它告诉我们您的消息的总长度,以防您的有效负载分布在多个数据包上。我们正在查看的是你的整个TLS信息包吗?只有你知道你的信息有多长,长度是多少

TLS消息长度

  The TLS Message Length field is four octets, and is present only
  if the L bit is set.  This field provides the total length of the
  TLS message or set of messages that is being fragmented.
我假设整个消息都是您突出显示的,因此其长度为199

即使上面的一些细节对于您的数据包来说是错误的,一般的想法是您的长度错误了,也许标志也错误了

资源:


你说的“wireshark拒绝接受”是什么意思?您是只构建EAP还是同时构建RADIUS数据包?仅构建EAP。Wireshark通常会单独检测客户端hello中的字段。例如,0x0301用于TLS 1.0,22用于握手等。在我的数据包中,wireshark仅显示SSL和一块数据,如我在图像中突出显示的数据,无法解码相应字段。感谢您的深入查看!我将对代码进行更改,看看会发生什么。我试图复制的消息是TLS_client_hello消息。是否需要设置S位?我以为没有。之前的消息设置了S位,所以我认为该消息是启动TLS握手的消息