IEEE 802.1X
IEEE 802.1X
是
IEEE
制定关于用户接入网络的认证标准(注意:此处X是大写
[1]
),全称是“
基于端口的网络接入控制”
,属于
IEEE 802.1
网络协议组的一部分。于2001年标准化,之后为了配合无线网络的接入进行修订改版,于2004年完成。
它为想要连接到
LAN
或
WLAN
的设备提供了一种
认证
机制。
IEEE 802.1X协议在用户接入网络(可以是
以太网
/
802.3
或者
WLAN
网)之前运行,运行于网络中的
数据链路层
,
EAP
协议
RADIUS
协议。
IEEE 802.1X定义了在
IEEE 802
上运行
扩展认证协议
(EAP,即”EAP over LAN”或EAPOL
[2]
)的封装方式。
扩展认证协议
(英语:Extensible Authentication Protocol,缩写为 EAP)
,是一个在
无线网络
或
点对点协议
中普遍使用的
认证
框架。
EAP是一个认证框架,不是一个特殊的认证机制。
EAP提供一些公共的功能,并且允许协商所希望的认证机制。这些机制被叫做EAP方法,现在大约有40种不同的方法。IETF的RFC中定义的方法包括:EAP-MD5, EAP-OTP, EAP-GTC, EAP-TLS, EAP-SIM,和EAP-AKA, 还包括一些厂商提供的方法和新的建议。无线网络中常用的方法包括EAP-TLS, EAP-SIM, EAP-AKA, PEAP, LEAP,和EAP-TTLS。
当EAP被基于
IEEE 802.1X
的网络接入设备(诸如802.11a/b/g ,无线接入点)调用时,
现代的EAP方法可以提供一个安全认证机制,并且在用户和
网络接入服务器
之间协商一个安全的PMK。该PMK可以用于使用
TKIP
和
AES
加密的无线会话
https://baike.baidu.com/item/EAP
协议
EAP协议是使用可扩展的
身份验证协议
的简称,全称Extensible Authentication Protocol。是一系列验证方式的集合,
设计理念
是满足任何链路层的身份验证需求,支持多种链路层
认证
方式。
EAP协议简介:
EAP(Extensible Authentication Protocol)为可扩展身份验证协议,
是一系列验证方式的集合
,设计理念是满足任何链路层的身份验证需求,支持多种链路层认证方式。EAP协议是IEEE 802.1x认证机制的核心,它将实现细节交由附属的EAP Method协议完成,如何选取EAP method由认证系统特征决定。这样实现了EAP的扩展性及灵活性,如图所示,EAP可以提供不同的方法分别支持PPP,以太网、无线局域网的链路验证。
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 类型。
概述
802.1X验证涉及到三个部分:
申请者、验证者和验证服务器
。
申请者
是一个需要连接到LAN/WAN的客户端设备(如便携机),同时也可以指运行在客户端上,提供凭据给验证者的软件。
验证者
是一个网络设备,如以太网交换机或无线接入点。
验证服务器
通常是一个运行着支持
RADIUS
和
EAP
协议的主机。
验证者就像是一个受保护网络的警卫。申请者(如客户端设备)不允许通过验证者访问到受保护一侧的网络,直到申请者的身份被验证和授权。这就像是允许进入一个国家之前要在机场的入境处提供一个有效的签证一样。使用802.1X基于端口的验证,申请者向验证者提供凭据,如用户名/密码或者数字证书,验证者将凭据转发给验证服务器来进行验证。如果验证服务器认为凭据有效,则申请者(客户端设备)就被允许访问被保护侧网络的资源。
EAP数据首先被封装在EAPOL帧中,传输于申请者(Supplicant)和验证者(Authenticator)之间。随后又封装在RADIUS或Diameter,传输于验证者和验证服务器(Authentication server)之间。
1.EAPOL
协议
EAPOL(EAPoverLANs)是802.1X协议定义的一种报文封装格式,主要用于在客户端和设备端之间传送EAP协议报文,以允许EAP协议报文在LAN上传送。
2.EAP协议
802.1X协议采用EAP(ExtensibleAuthenticationProtocol,可扩展认证协议)来实现客户端、认证系统和认证服务器之间认证信息的交互。通过支持EAP协议,可以使用认证服务器来实现各种认证机制,认证系统仅仅需要传送认证信息,并根据认证返回的结果控制受控端口的状态。
3.RADIUS协议
RADIUS(RemoteAuthentication Dial In UserService用户远程拨入认证服务)是一种AAA的应用协议,意思就是同时兼顾验证(authentication)、授权(authorization)及计费(accounting)三种服务的一种网络传输协议。
如图所示:如果是协议帧直接通过非授权接口,也就是只允许802.1X的认证报文EAPoL通过。如果是授权接口(传输数据报文)那么必须在用户完成身份认证之后才可以传输。
EAP终结认证
这篇博客可以补充:
https://blog.csdn.net/phunxm/article/details/9389661
RADIUS
RADIUS:Remote Authentication Dial In User Service,
远程用户
拨号认证系统由RFC2865,RFC2866定义,是应用最广泛的
AAA协议
。AAA是一种管理框架,因此,它可以用多种协议来实现。在实践中,人们最常使用远程访问拨号用户服务(Remote Authentication Dial In User Service,RADIUS)来实现AAA。
RADIUS是一种C/S结构的协议,它的
客户端
最初就是
NAS
(Net Access Server)
服务器
,任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。RADIUS协议认证机制灵活,可以采用
PAP
、
CHAP
或者Unix登录认证等多种方式。RADIUS是一种可扩展的协议,它进行的全部工作都是基于Attribute-Length-Value的向量进行的。RADIUS也支持厂商扩充厂家专有属性。
由于RADIUS协议简单明确,可扩充,因此得到了广泛应用,包括普通电话上网、
ADSL
上网、小区宽带上网、IP电话、
VPDN
(Virtual Private Dialup Networks,基于
拨号用户
的虚拟专用拨号网业务)、移动电话预付费等业务。IEEE提出了
802.1x
标准,这是一种基于
端口
的标准,用于对
无线网络
的接入认证,在认证时也采用RADIUS协议。
功能描述
组网应用
常见的AAA组网示意如图所示,其中RADIUS应用在AAA服务器上对用户进行认证、授权和计费服务。
图中NAS(网络接入服务器)作为RADIUS客户端,向远程接入用户提供接入及与RADIUS服务器交互的服务。RADIUS服务器上则存储用户的身份信息、授权信息以及访问记录,对用户进行认证、授权和计费服务
工作原理
用户接入NAS,NAS使用Access-Require
数据包
向
RADIUS服务器
提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享
密钥
,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对
用户认证
,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account- Require,RADIUS服务器响应Account-Accept,对用户的计费开始,同时用户可以进行自己的相关操作。
RADIUS还支持代理和漫游功能。简单地说,代理就是一台
服务器
,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费
数据包
。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS
服务器
进行认证,用户到非归属运营商所在地也可以得到服务,也可以实现虚拟运营。
RADIUS
服务器
和NAS服务器通过UDP协议进行通信,RADIUS服务器的1812
端口
负责认证,1813端口负责计费工作。采用UDP的基本考虑是因为NAS和RADIUS
服务器
大多在同一个
局域网
中,使用UDP更加快捷方便,而且UDP是无连接的,会减轻RADIUS的压力,也更安全。
RADIUS协议还规定了
重传机制
。如果NAS向某个RADIUS
服务器
提交请求没有收到返回信息,那么可以要求备份RADIUS
服务器
重传。由于有多个备份RADIUS
服务器
,因此NAS进行重传的时候,可以采用
轮询
的方法。如果备份RADIUS服务器的
密钥
和以前RADIUS服务器的密钥不同,则需要重新进行认证。
优势特点
RADIUS协议承载于UDP之上,官方指定端口号为认证授权端口1812、计费端口1813。RADIUS协议简单明确、扩展性好,因此得到了广泛应用,具有以下特点:
-
采用通用的客户端/服务器结构组网
NAS作为RADIUS的客户端负责将用户信息传递给指定的RADIUS服务器,然后处理RADIUS服务器的返回结果。RADIUS服务器负责接收用户的连接请求,对用户进行认证,给客户端返回用户配置信息。
-
采用共享密钥保证网络传输安全性
客户端与RADIUS服务器之间的交互是通过共享密钥来进行相互认证的,以减少在不安全的网络中用户密码被侦听到的可能性。
-
具有良好的可扩展性
RADIUS是一种可扩展的协议,所有的交互报文由多个不同长度的ALV(Attribute-Length-Value)三元组组成,新增加属性和属性值不会破坏到协议的原有实现。因此RADIUS协议也支持设备厂商扩充厂家专有属性。
-
协议认证机制灵活
RADIUS协议认证机制灵活,支持多种认证用户的方式。如果用户提供了用户名和用户密码的明文,RADIUS协议能够支持PAP、CHAP、UNIX login等多种认证方式。
RADIUS协议简单明确、扩展性强,因此得到了广泛应用。在普通电话拨号上网、ADSL拨号上网、社区宽带上网、VPDN业务、移动电话预付费等业务中都能见到RADIUS的身影。
共享密钥与公开密钥:
当你需要在一个购物网站输入账号以及密码时时,含有你的账号与密码信息的数据会被发送到服务器,在发送的过程中,数据会有两种加密形式——共享密钥加密和公开密钥加密。
共享密钥加密可以这样理解,服务器为了使数据传输更安全,送给你一把钥匙,这把钥匙可以将数据锁在一个盒子里,当然也可以打开已经锁上的盒子。当数据送至服务器时,服务器会用同样的钥匙打开盒子。这种方法的坏处是,一旦贼人得到钥匙,便可以打开已经锁上的盒子。而公开密钥则避免了这种情况。
公开密钥加密会使用两把钥匙,服务器会发送给你一把只能锁上盒子却不能打开盒子的钥匙,而服务器自己会留一把可以打开盒子的钥匙,这样就避免了钥匙在中途被其他人抢走风险。当服务器发回响应时会用同样的方式,只不过留有可以打开盒子钥匙的人变成了你。
协议结构
Identifier
― 匹配请求和响应的
标识符
。
Length
― 信息大小,包括头部。
Authenticator
域占用16个字节,用于Radius Client 和Server之间
消息认证
的有效性,和密码隐藏算法。访问请求Access-Request报文中的认证字的值是16字节随机数,认证字的值要不能被预测并且在一个共享
密钥
的生命期内唯一。
1.访问请求认证字
在Access-Request包中认证字的值是16字节随机数,认证字的值要不能被预测,并且在一个共享
密钥
的生命期内唯一; [6]
2.访问回应认证字
Access-Accept Access-Reject 和Access-Challenge包中的认证字称为访问回应认证字,访问回应认证字的值定义为MD5(Code+ID+Length+RequestAuth+Attributes+Secret); [6]
3.计费请求认证字
在计费请求包中的认证字域称为计费请求认证字,它是一个16字节的MD5校验和,计费请求认证字的值定义为MD5(Code + Identifier + Length + 16 zero octets + request attributes +shared secret); [6]
4.计费回应认证字
在计费回应
报文
中的认证字域称为计费回应认证字,它的值定义为MD5(Accounting-Response Code + Identifier + Length + the RequestAuthenticator field from the Accounting-Request packet being replied to +the response attributes + shared secret);
消息交互
radius
服务器
对用户的认证过程通常需要利用
nas
等设备的代理认证功能,radius
客户端
和radius 服务器之间通过共享
密钥认证
相互间交互的消息,用户密码采用密文方式在网络上传输,增强了安全性。radius 协议合并了认证和授权过程,即响应
报文
中携带了授权信息。
基本交互步骤如下:
(1) 用户输入用户名和口令;
(2) radius
客户端
根据获取的用户名和口令,向radius
服务器
发送认证请求包(access-request)。
(3) radius
服务器
将该用户信息与users 数据库信息进行对比分析,如果认证成功,则将用户的权限信息以认证响应包(access-accept)发送给radius
客户端
;如果认证失败,则返回access-reject 响应包。
(4) radius
客户端
根据接收到的认证结果接入/拒绝用户。如果可以接入用户,则radius
客户端
向radius
服务器
发送计费开始请求包(accounting-request),status-type 取值为start;
(5) radius
服务器
返回计费开始响应包(accounting-response);
(6) radius
客户端
向radius
服务器
发送计费停止请求包(accounting-request),status-type 取值为stop;
(7) radius
服务器
返回计费结束响应包(accounting-response)。