技术文档
EAP认证方案
版本:V1.0
拟制
日期
审核
日期
标准化
日期
批准
日期

修改记录
关键名词
定义系统或产品中涉及的重要术语,为读者在阅读文档时提供必要的参考信息。
1    EAP    3
1.1    EAP报文    3
1.2    EAP-RADIUS    6
1.3    中继方式流程    9
1.4    终结方式流程    10
2    功能设计    11
2.1    EAP认证方式    11
2.2    端口控制    11
2.3    触发方式    12
3    命令设计    12

1 EAP
EAPExtensible Authentication Protocol,可扩展身份验证协议)是一系列验证方式的集合,设计理念是满足任何链路层的身份验证需求,支持多种链路层认证方式。
EAP位于PPP身份验证协议中,并为多种不同的身份验证方法提供通用框架。EAP用于在请求方和身份验证服务器之间传递身份验证信息,实际的身份验证会按照EAP类型进行定义与处理。
EAP报文
802.1X中对EAP进行了简单的修改形成了EAPOLEAP  over  LAN)协议,使其能在广播式的以太网中使用。EAP工作中OSI模型的第二层上,不需要用户端事先获取IP地址,简单易实现,主要用于客户端和认证者之间的认证信息交互。
1)帧格式说明
帧类型0x888e
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a
b
c
d
e
f
g
h
i
j
K
    帧说明如下:
编号
长度(字节)
说明
a
6
目的mac
b
6
mac
c
2
协议类型,0x888e
EAPOL
d
1
EAPOL协议版本:通常为常量0x01
e
1
EAPOL报文类型:
0x00EAPOL-Packet
0x01EAPOL-Start
0x02EAPOL-Logoff
f
2
EAPOL帧长度
EAP
g
1
EAP通信类型:
0x01EAP-Request
0x02EAP-Response
0x03EAP-Success
0x04EAP-Failure
h
1
EAP通信id
i
2
EAP数据长度。值与c相等
j
1
EAP协商类型
k
n
EAP  Body
2802.1x认证的EAP协议总体流程
在任何时候服务器发来EAP-Failure数据包,都表示整个认证过程结束。
3)数据包构建
EAPOL-StartEAPOL-Logoff
只需填好相应的位,没有其他附加消息,报文长度只有18字节。
EAPOL-REQUEST-Identity
服务器发来的这个报文也比较简单,可能唯一有用的数据是“eEAP通信id”位,需要给发送回去的报文中把相应位设置为该值,虽然这很可能是常数。
EAPOL- RESPONSE-Identity
只需要设置“d:EAP通信id”位,然后在EAP头后紧接用户名ASCII码信息。有些品牌的协议中,则顺带在此数据包开始校验客户端的IP、版本号等信息。
Identity格式
    +-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | EAP Header      |  Username
    +-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
EAPOL- REQUEST-MD5_Challenge
到该用户名对应的口令信息,用随机生成的一个加密字Challenge对它进行加密处理(MD5)。服务器请求MD5校验的报文中包含了重要的信息,首先也是“e:EAP通信id”位,后一个报文也需要设置该位;
EAP报头后紧接一个一位的长度值L(常量0x10),表示紧跟其后的重要数据的长度,其后的16位值则需要用来计算下一个报文中的信息,我们称之为attach-key
    MD5_Challenge格式
    +-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | EAP Header      |L|MD5-Key/Value
    +-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
EAPOL- RESPONSE-MD5_Challenge
首先需要设置“d:EAP通信id”位,然后构建一个这样的字节数组[(e:EAP通信id)(用户密码的ASCII)(attach-key)],这个字节的长度当然是(1+用户密码长度+16),然后送入MD5计算函数中,获得16位的计算结果,再把这16位计算结果填入报文。报文格式跟请求的类似,在包头后紧接一位长度值,当然是0x10,然后是16位的计算结果。用该加密字对口令部分进行加密处理(MD5) 来的加密后的口令信息和其自己经过加密运算后的口令信息进行对比,判断用户是否合法。
一个客户端程序所做的事情通常就是这么多,而因为EAP协议的“Extensible”特性,几乎我们见到的每个品牌的协议都有所扩展,而且各不相同,所以各个品牌之间的客户端甚至交换机等设备都可能完全不可兼容的,其协议很可能在上述的报文中都添加一个信息尾,用来校验各种信息。
注意:EAPOL帧和EAP帧的两处长度位置,前者的长度是不算EAPOL头的4个字节的,而后者则包含自身头部的5个字节,所以这两个长度的值可能是一致的,但具体可能有扩展信息放在EAPOL帧尾部,则前者比后者大。
EAPOL帧在二层传送时,必须要有目标MAC地址,当客户端和认证系统彼此之间不知道发送的目标时,其目标MAC地址使用由802.1x协议分配的组播地址01-80-c2-00-00-03
EAP-RADIUS
EAP-RADIUS 并不是一种 EAP 类型,但是可以通过验证程序将任何 EAP 类型的 EAP 消息传递到 RADIUS 服务器,以便进行身份验证。例如,将 ISA 服务器配置为用于 RADIUS 身份验证时,将封装在远程 VPN 客户端和 ISA 服务器之间发送的 EAP 消息,并在远程访问服务器和 RADIUS 服务器之间将格式设置为 RADIUS 消息。
EAP-RADIUS 用在将 RADIUS 作为身份验证提供程序的环境中。使用 EAP-RADIUS 的优势在于不需要在每个远程访问服务器上安装 EAP 类型,只需要在 RADIUS 服务器上安装即可。在 Internet 验证服务 (IAS) 中,只需要在 ISA 服务器上安装 EAP 类型。
RFC2869RADIUS扩展》中定义了EAP- MessageMessage-Authenticator两个属性用于支持EAP
EAP本身不是一个认证机制,而是一个通用框架。
在设备端与RADIUS服务器之间,可以使用两种方式来交换信息。一种是EAP协议报文使用EAPOREAP over RADIUS)封装格式承载于RADIUS协议中;另一种是设备端终结EAP协议报文,采用包含PAPosi模型第二层Password Authentication Protocol,密码验证协议)或CHAPChallenge Handshake Authentication Protocal,质询握手验证协议)属性的报文与RADIUS服务器进行认证。这样在认证过程中就存在两种认证方式:EAP中继方式和EAP终结方式。
EAP中继方式IEEE 802.1X标准规定的,将EAP(扩展认证协议)承载在其它高层协议中,如EAP over RADIUS,以便扩展认证协议报文穿越复杂的网络到达认证服务器。一般来说,EAP中继方式需要RADIUS服务器支持EAP属性:EAP- MessageMessage-Authenticator
EAP终结方式EAP报文在设备端终结并映射到RADIUS报文中,利用标准RADIUS协议完成认证、授权和计费。设备端与RADIUS服务器之间可以采用PAP或者CHAP认证方法。
RFC2869协议中RADIUS 为支持EAP 认证增加了两个属性:EAP-MessageEAP 消息)和Message-Authenticator 消息认证码)。
(1) EAP-Message79
本属性用于封装EAP报文(在RFC2844中定义),以便让NAS即使不理解EAP协议,也能利用EAP对拨号接入用户进行认证。
EAP-Message属性封装
如图所示,类型代码为79String域最长253字节,如果EAP数据包长度大于253 字节,可以对其进行分片,依次封装在多个EAP-Message属性中。
NAS把从用户接收到的EAP报文放在一个或多个EAP属性中,作为Access-Request的一部分,转发给RADIUS服务器,RADIUS服务器可以在Access-ChallengeAccess-AcceptAc
cess-Reject中返回EAP属性。若包含多个EAP-Message属性,它们必须连续按顺序放置。
Access-AcceptAccess-Reject报文中应该只有一个EAP-Message属性,此属性包含EAP-SuccessEAP-Failure
注意:
希望用EAP实现多种认证方法,包括强壮的加密技术。为了预防攻击者通过攻击RADIUS/EAP破坏EAP(例如,通过 修改EAP-SuccessEAP-Failure报文),RADIUS/EAP有必要提供身份保护,至少象EAP方法本身那样强壮。
因此,必须 Message-Authenticator属性保护所有携带EAP-Message属性的Access-Request, Access-Challenge, Access-Accept, Access-Reject 报文。