【问题标题】:Designing an EAP-TLS client hello message设计 EAP-TLS 客户端问候消息
【发布时间】:2014-09-02 09:12:42
【问题描述】:

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

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

【问题讨论】:

  • “wireshark 拒绝接受”是什么意思?您是只构建 EAP,还是同时构建 RADIUS 数据包?
  • 仅 EAP。 Wireshark 通常会单独检测客户端 hello 中的字段。例如,TL​​S 1.0 的 0x0301,握手的 22 等。对于我的数据包,wireshark 只显示 SSL 和一大块数据,就像我在图像中突出显示的那样,并且无法解码相应的字段。

标签: c networking ssl wireshark


【解决方案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 开始消息与片段区分开来 确认。

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

【讨论】:

  • 感谢您的深入了解!我将更改我的代码,看看会发生什么。我试图复制的消息是 TLS_client_hello 消息。是否需要设置 S 位?我以为没有。此消息之前的消息设置了 S 位,因此我认为该消息是启动 TLS 握手的消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2019-04-08
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2010-11-05
相关资源
最近更新 更多