EAPOL

          EAP(Extensible Authentication Protocol),可扩展认证协议,是一种普遍使用的支持多种认证方法的认证框架协议,主要用于网络接入认证。该协议一般运行在数据链路层上,即可以直接运行于PPP或者IEEE 802之上,不必依赖于IP。EAP可应用于无线、有线网络中。

         EAP的架构非常灵活,在Authenticator(认证方)和Supplicant(客户端)交互足够多的信息之后,才会决定选择一种具体的认证方法,即允许协商所希望的认证方法。认证方不用支持所有的认证方法,因为EAP架构允许使用一个后端的认证服务器(也就是AAA服务器),此时认证方将在客户端和认证服务器之间透传消息。

图1 EAP典型使用组网(Ethernet)

       该协议支持重传机制,但这需要依赖于底层保证报文的有序传输,EAP不支持乱序报文的接收。协议本身不支持分片与重组,当一些EAP认证方法生成大于MTU(Maximum Transmission Unit,最大传输单元)的数据时,需要认证方法自身支持分片与重组。

EAP认证方法目前大约有40种,IETF的RFC中定义的方法包括:EAP-MD5、 EAP-OTP、EAP-GTC、EAP-TLS、EAP-SIM和EAP-AKA, 还包括一些厂商提供的方法和新的建议。

EAPOL报文的封装格式

EAP在LAN的报文(简称EAPOL)封装格式在IEEE-802.1X协议中定义,其数据包的格式如下所示。

PAE(Port Access Entity)Ethernet Type:2字节,表示协议类型,为0x888E。

Protocol Version:1字节,表示EAPOL帧的发送方所支持的协议版本号。

Type:1字节,表示EAPOL数据帧类型,具体类型如表1所示。

类型

说明

EAP-Packet(值为0x00):认证信息帧,用于承载认证信息

该类型的帧在认证方重新封装并承载于RADIUS等协议上,便于穿越复杂的网络到达认证服务器

EAPOL-Start(值为0x01):认证发起帧

这两种类型的帧仅在客户端和认证方之间存在

EAPOL-Logoff(值为0x02):退出请求帧

表1 EAPOL数据类型

Length:2字节,表示数据长度,也就是“Packet Body”字段的长度,单位为字节。如果为0,则表示没有后面的数据域。

EAPOL-Start和EAPOL-Logoff报文的Length值都为0。

Packet Body:表示数据内容,根据不同的Type有不同的格式。

eap报文格式

当EAPOL数据帧格式Type域为EAP-Packet时,Packet Body为EAP数据报文,结构如图4所示。

图4 EAP报文格式

Code:一个字节,指明EAP包的类型,共有4种,域值定义如下:

1--------Request

2--------Response

3--------Success

4--------Failure

由于该字段值只定义了1到4,如果EAP报文的该字段为其他值,则应被Authenticator和Supplicant丢弃。

Identifier:一个字节,用于应答报文和请求报文之间进行匹配。

Length:两个字节,EAP包的长度,包含Code、Identifier、Length和Data域,单位为字节。

Data:零个或多个字节,EAP包的内容,由Code类型决定

RFC 3748中定义的Success和Failure类型的包没有Data域,相应的Length域的值为4。但是某些软件的实现中,为了说明认证失败的原因,在Length域后面增加了字段用于说明下线的原因,故Length域的值可能为其他值。

Request和Response类型报文的Data域格式如图所示。

Type:一个字节,标识EAP的认证类型。

Type Data:该字段的内容由Type字段的值决定。

Type字段目前定义的值及其简要说明如下:

Type=1 ----Identifier(用来询问对端的身份)

Type=2 ----Notification(非必须的一个消息,传送一些警告消息,比如提示密码将要超期、OTP的顺序号码接近零以及认证失败的警告等)。

Type=3 ----Nak (Response Only)(Request报文中的认证类型不可接受时回复该类型的报文)

Type=4 ----MD5-Challenge(类似于CHAP中的MD5-Challenge,使用MD5算法)

Type=5 ----One-Time Password (OTP)(一种密码交互的方式)

Type=6 ----Generic Token Card(通用令牌卡类型,适用于各种需要用户输入信息的令牌卡的实现)

Type=254 ----Expanded Types(供厂商支持自己的扩展类型)

Type=255 ----Experimental use(在实验新的类型时使用)

每种Type对应的Type Data字段这里不作详细描述,有兴趣的读者请查阅RFC 3748相关章节。

 EAP认证过程

EAP过程由认证方发起,而认证协议一般都是由客户端发起,为了在特定的认证协议上支持EAP过程,认证协议需要增加一个或多个的附加报文来满足条件。如以太网上的认证通常情况下是以客户端发送EAPOL报文开始的。

EAP的典型过程如下:

1、Authenticator发送请求报文EAP-Request给Supplicant(客户端),表明EAP认证开始。该请求由一个字段标明需要请求的数据是什么。这个字段包含Identity(询问对端的身份), MD5-challenge(MD5挑战字)等。上述发送EAP-Request的步骤在某些情况下也可省去,比如在有线网络中,Authenticator(有时也称为NAS)已经根据客户端连接的端口识别用户身份,或者通过MAC地址,IMSI卡等识别用户身份的情况下。

2、Supplicant针对Authenticator发过来的请求回应一个响应消息EAP-Response,该消息包含了请求消息中请求的字段信息,如身份识别信息。

3、Authenticator继续发送EAP-Request消息,消息中包含具体EAP Type及其协议数据,Supplicant对此做出响应。根据EAP Method的不同,此步骤可能会交互多次。

EAP交互过程是Supplicant与Authenticator一来一往的过程,每次只能处理一个EAP报文,在收到响应之前不能发送新的请求,即锁步机制(Lockstep)。因此Authenticator要负责请求消息的重传。如果重传一定次数后都没有收到应答消息,这次的EAP过程就要被终结。重传后收到应答消息或者一直没有收到应答消息,Authenticator都不发送成功或者失败消息。

4、交互多次之后,会出现两种情形:Authenticator不能确认Supplicant的接入权限,此时必须发送EAP-Failure,终结此次的EAP过程;或者确认接入权限,此时必须发送EAP-Success消息。

Authenticator也可以作为Pass Through设备,透传EAP报文。这种情形下Authenticator检查EAP的Code,Id及Length并将报文转发出去。Authenticator需要将EAP Code为2(Response)的报文转给后端的认证服务器,将EAP Code=1(Request),3(Success),4(Failure)的报文转给Supplicant。在这个处理过程中除非Pass Through Authenticator实现了某种EAP Methods,一般是只将消息转发,并不去检查EAP Methods Layer的的消息头(即EAP Type)。

### EAPOL 睡眠状态处理方法 在讨论EAPOL(Extensible Authentication Protocol over LAN)睡眠状态处理之前,先理解WNM-Sleep模式的工作机制有助于全面把握设备进入低功耗状态下如何维持安全连接。 #### WNM-Sleep模式概述 WNM-Sleep模式允许客户端设备通知接入点(AP),表明即将进入省电模式。这种模式下,客户端可以减少无线接口活动时间从而节省电量。当客户端准备休眠时会向AP发送带有特定参数的请求帧[^1]: - **Category**: 表明这是一个WNM类型的管理动作。 - **Action**: 指定具体的操作为Sleep Mode。 - **Dialog Token**: 唯一标识此次对话。 - **WNM-Sleep Mode Element**: 描述期望的行为,比如是否希望接收缓存的数据包。 - **TFS Request Elements**: 可选字段用于指定传输反馈服务需求。 一旦接收到有效的WNM-Sleep模式请求,AP将以类似的结构回应确认消息给客户端,其中包含了必要的指示来支持后续通信过程中的数据交换安排。 对于EAPOL而言,在STA(Station)进入或退出睡眠期间涉及到的安全关联更新(SAU)流程至关重要。为了确保即使在网络参与者处于不同功率级别操作的情况下也能保持安全性,IEEE 802.1X定义了一套完整的握手协议用来验证身份并建立密钥材料。然而值得注意的是,尽管存在这些规定,实际应用中关于何时应当触发某些阶段的具体细节可能并不总是十分明确[^2]。 因此,在设计实现涉及EAPOL与睡眠状态交互的应用程序时,开发者需要注意以下几点: - 当STA打算进入睡眠前应完成所有必要的认证步骤; - 如果使用了快速重连特性,则需保证相关上下文信息被妥善保存以便唤醒后能够迅速恢复会话而不必重新经历整个四次握手过程; - 对于任何可能导致长时间延迟的情况都要提前规划好超时策略以及相应的错误处理逻辑; ```python def handle_eapol_sleep_transition(is_entering_sleep=True): """ 处理EAPOL相关的睡眠转换事件 参数: is_entering_sleep (bool): True表示正在进入睡眠; False表示正从睡眠中醒来. 返回: None """ if is_entering_sleep: # 进入睡眠前的动作 complete_authentication() save_session_context() # 若适用 else: # 从睡眠中苏醒后的动作 restore_session_context() # 若已保存则加载 verify_connection_integrity() def complete_authentication(): pass # 实现具体的认证完成逻辑 def save_session_context(): pass # 实现保存当前会话环境的方法 def restore_session_context(): pass # 实现读取先前保存的会话设置的功能 def verify_connection_integrity(): pass # 执行必要的检查以确保护链路质量未受损 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值