设计EAP-TLS客户端问候消息

时间:2014-07-11 16:59:46

标签: c networking ssl wireshark

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

enter image description here

我通过手动用C填充相应信息的缓冲区设计的EAP部分。我使用OpenSSL导出的TLS部分如in this question所示。然后我转到RFC并在数据包中添加了4个八位字节长度字段和TLS标志。但wireshark拒绝接受它!我尝试逐字节地将TLS数据与通过TCP发生的TLS连接进行比较,我可以看到客户端hello(十六进制为16),TLS版本(0x0301:TLS 1.0)的字段顺序相同。你能帮我辨别我哪里出错吗?谢谢!此外,如果有人知道可以生成这些消息的客户端,那么我可以比较它们,这也是有益的。谢谢!

1 个答案:

答案 0 :(得分:1)

您的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

RFC2716说:

  

长度

  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位未设置,这意味着该数据包是片段确认。那是对的吗? (可能不是,但只有你知道)

  

S位         (EAP-TLS启动)在EAP-TLS开始消息中设置。这个         区分EAP-TLS Start消息与片段         确认。

获取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.

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

资源:

http://www.netcraftsmen.net/resources/archived-articles/429-examining-8021x-and-eap.html

http://www.ietf.org/rfc/rfc2716.txt