
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协定。
基本介绍
- 中文名:远程用户拨号认证服务
- 外文名:Remote Authentication Dial In User Service
- 简称:RADIUS
- 套用学科:网路通信
- 属性:AAA认证协定
- 行业标準:RFC2865 RFC2866 IEEE802.1x
历史
RADIUS协定最初是由Livingston公司提出的,原先的目的是为拨号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协定。
创立于1966年的Merit Network, Inc.是密执安大学的一家非营利公司,其业务是运行维护该校的网路互联MichNet。1987年,Merit在美国NSF(国家科学基金会)的招标中胜出,赢得了NSFnet(即Internet前身)的运营契约。因为NSFnet是基于IP的网路,而MichNet却基于专有网路协定,Merit面对着如何将MichNet的专有网路协定演变为IP协定,同时也要把MichNet上的大量拨号业务以及其相关专有协定移植到IP网路上来。
1991年,Merit决定招标拨号伺服器供应商,几个月后,一家叫Livingston的公司提出了建议,冠名为RADIUS,并为此获得了契约。
1992年秋天,IETF的NASREQ工作组成立,随之提交了RADIUS作为草案。很快,RADIUS成为事实上的网路接入标準,几乎所有的网路接入伺服器厂商均实现了该协定。
1997年,RADIUS RFC2058发表,随后是RFC2138,最新的RADIUS RFC2865发表于2000年6月。
功能描述
组网套用
常见的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的身影。
协定结构
Code域长度为1个位元组,用于标明RADIUS报文的类型,如果Code域中的内容是无效值,报文将被丢弃,有效值如下:
1、请求访问(Access-Request);

2、接收访问(Access-Accept);
3、拒绝访问(Access-Reject);
4、计费请求(Accounting-Request);
5、计费回响(Accounting-Response);
11、挑战访问(Access-Challenge);
12、伺服器状况(Status-Server — Experimental);
13、客户机状况(Status-Client — Experimental);
255、预留(Reserved)
Identifier― 匹配请求和回响的标识符。
Length― 信息大小,包括头部。
Authenticator域占用16个位元组,用于Radius Client 和Server之间讯息认证的有效性,和密码隐藏算法。访问请求Access-Request报文中的认证字的值是16位元组随机数,认证字的值要不能被预测并且在一个共享密钥的生命期内唯一。
1.访问请求认证字
在Access-Request包中认证字的值是16位元组随机数,认证字的值要不能被预测,并且在一个共享密钥的生命期内唯一;
2.访问回应认证字
Access-Accept Access-Reject 和Access-Challenge包中的认证字称为访问回应认证字,访问回应认证字的值定义为MD5(Code+ID+Length+RequestAuth+Attributes+Secret);
3.计费请求认证字
在计费请求包中的认证字域称为计费请求认证字,它是一个16位元组的MD5校验和,计费请求认证字的值定义为MD5(Code + Identifier + Length + 16 zero octets + request attributes +shared secret);
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)。