RADIUS认证服务器的实现

时间:2022-08-20 09:52:06

RADIUS认证服务器的实现

[摘要]RADIUS是目前应用最广泛的AAA协议。作为一种可扩展的C/S结构协议,它认证机制灵活,支持各类厂商扩充的专有属性,协议简单明确,因此得到广泛应用。通过分析RADIUS协议,来实现RADIUS的认证过程。

[关键词]协议RADIUS认证服务器

中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1210113-01

认证服务器是LAN用户管理的主要控制部分。通过单个服务器可同时支持多个接入控制器,为不同地区的接入用户提供认证及后续的计费等服务。

认证服务器与接入控制器之间通过主要RADIUS协议进行通讯,该协议是IP体系中的认证、授权、计费(AAA)协议。当用户断开连接时,认证服务器收集来自接入控制器的计费数据,并将其转换为相应的计费格式,并发送到计费系统中去。

一、RADIUS协议

RADIUS即远程认证接入用户服务(Remote Authentication Dial In User Service),作为一种Client/Server(客户机/服务器)模式的安全协议,已经成为一种常用接入Internet的认证/计费模式。RADIUS具有安全性好、扩展灵活、易于管理等特点,还具有很强的记账功能。

RADIUS协议的特点主要有以下四个:

客户/服务器模型:采用客户/服务器(Client/Server)模型,RADIUS的客户端通常是NAS(网络接入服务器)。客户端将用户的信息传递到指定的服务器,并处理收到的回应;服务器收到用户的连接请求之后,对用户进行认证,并返回相应的配置信息。

网络安全性:客户端和服务器之间的消息传递需要通过一个非网络传输的共享密钥进行相互认证。而且为了防止被窃听,用户的口令等有用信息通常经过加密传输。

灵活的认证机制:可以支持多种的认证机制,如PAP、CHAP、Unix登陆。通过扩展,RADIUS还可以支持EAP,从而支持更多种类的认证机制。

协议可扩展性:数据包的传递采用“属性-长度-值”的格式对消息进行属性封装。当需要加入新的属性时,无需更改原有的协议,扩展性好。

二、RADIUS服务器的工作过程

RADIUS采用Client/Server模式,其Client端一般是网络接入服务器(Network Access Server,NAS)。NAS用来将用户信息传递给RADIUS服务器;RADIUS服务器则对用户进行认证,并返回用户的认证结果和配置信息。其工作流程如图1所示。

1.网络用户登录网络时,NAS会有一个客户定义的Login提示符要求用户直接输入用户信息(用户名和口令),或者通过PPP协议要求远程的登录用户输入用户信息。

2.采用RADIUS验证的NAS在得到用户信息后,将根据RADIUS标准规定的格式,向RADIUS服务器发出Access-Request访问请求包。包中一般包括以下RADIUS属性值:用户名、用户口令、访问服务器的ID、访问端口的ID。其中的用户口令采用MD5加密。

3.NAS在发出Access-Request包之后,会引发计时器和计数器。当超过重发时间间隔时,计时器会激发NAS重发Access-Request包。当超过重发次数时,计数器会激发NAS向网络中的其他备份RADIUS服务器发出Access-Request包。

4.当RADIUS服务器收到Access-Request包后,首先验证NAS的Secret(共享密码)与RADIUS服务器中预先设定的Secret是否一致,以确认是所属的RADIUS客户(NAS)送来的Access-Request包。在查验了包的正确性之后,RADIUS服务器会依据包中的用户名在用户数据库中查询是否有此用户记录。若有此用户的数据库记录,RADIUS服务器会根据数据库中用户记录的相应验证属性对用户的登录请求作进一步的验证。其中包括:用户口令、用户登录访问服务器的IP、用户登录的物理端口号等。

5.若RADIUS服务器设置为Proxy服务,RADIUS服务器可以将用户请求Access-Request包转向其他的验证服务提供者。比如:主机、NT、其他的RADIUS服务器等等。

6.若以上提到的各类验证条件不满足,RADIUS服务器会向NAS发出Access-Reject访问拒绝包。NAS在收到拒绝包后,会立即停止用户连接端口的服务要求,用户被强制Log-Out。

7.若以上提到的各类验证条件均满足,但RADIUS服务器中设置了用户的Challenge/Response握手验证要求时:RADIUS服务器会发出一个Access-Challenge包,这时用户会看到提示信息告知用户已经验证成功,要求用户进一步确认登录请求Access-Request。用户再次确认后,RADIUS服务器将比较两次的请求信息,决定如何响应用户(发送Access-Accept、Access-Reject或再一次的Access-Challenge)。

8.当所有的验证条件和握手会话均通过后,RADIUS服务器会将数据库中的用户配置信息放在Access-Accept包中送回给访问服务器,后者会根据包中的配置信息限定用户的具体网络访问能力。

9.在所有的验证、授权完成后,访问服务器会定期向RADIUS记账服务器发送Accounting Packet。RADIUS记账服务同时支持ODBC数据输出。

三、RADIUS包格式

RADIUS协议采用UDP作为传输层协议,早期的RADIUS认证端口为1645,目前官方指定端口为1812。数据包格式如图1所示,各字段从左向右、从上向下传输。

图1RADIUS包格式

RADIUS数据包共分五个部分:

1.Code(类型)

该域1个字节,识别RADIUS包的类型。

2.Identifier(识别符)

该域1个字节,用来辅助匹配请求和回复。如果RADIUS服务器收到的包与一段时间以前收到的包具有相同的客户端IP地址、端口以及Identifier,则认为收到了重复包,将被丢弃。

3.Length(长度)

该域2个字节。它指明整个包的长度,内容包括Code,Identifier,Length,Authenticator和Attributes。超过长度域的字节被视为填充,在

接收时应被忽略;如果包比长度域所指示的短时,则应被丢弃。最小长度为20字节,最大长度为4096字节。

4.Authenticator(认证码)

该域16个字节。这个值用于验证RADIUS服务器的应答(reply),并且还用于口令隐藏算法中。

5.Attributes(属性)

属性域用于传送详细的认证、授权信息以及详述请求和回复的配置信息。

四、认证服务器的认证实现

(一)WEB认证在RADIUS认证服务器中的实现

Web认证通过启动一个Web页面让用户输入用户名/密码,并把用户名/密码以RADIUS协议的格式发送给认证服务器,实现用户认证。

认证者所得到的用户信息(用户名,密码),根据radius协议,打成radius报文发送至服务器端的1811端口。服务器启动一个基于UDP的socket连接,并一直监视1810端口。此外,服务器将维护一张记录有用户认证信息的文件(包括用户名,密码)。一旦服务器接收到认证者从1810端口发送的RADIUS包,根据相应的协议分析radius报文,得到相应的用户信息进行认证,并把相应的认证结果打成radius报文,返回给认证者。

(二)EAP_MD5,LEAP,TLS,TTLS,PEAP认证在RADIUS认证服务器中的实现

RADIUS作为后端服务器,提供了认证的功能。为了具有更强的通用性和完整性,参考美国马里兰大学的关于实现802.1x的方案进行配置,实现RADIUS服务器的EAP_MD5,EAP_LEAP,EAP-TLS,EAP_TTLS,EAP_PEAP认证功能。以下以配置EAP_TLS为例:

1.安装radius服务器程序之前,需要首先安装一个最新版本或者2002年3月1日之后的稳定版本的openssl,以用于radius中的EAP/TLS认证模块。这个版本的openssl一般安装在/usr/local/openssl路径下,仅仅用于radius认证。

2.产生认证过程中所需要的证书。由用户信息产生私钥,然后由私钥产生CA(Certificate Authority),由CA产生两套证书,给client和server各一份。同时也需要生成random文件,来产生随机数。所有文件存贮成压缩文件形式cert.tgz,然后解压缩到固定目录下,如/etc/1x路径下。

3.获得最新的源程序的压缩包如:freeradius-snapshot-20020916.

tar.gz(其他支持EAP-TLS认证模块的版本亦可),解压缩到固定目录下,如/usr/local/radius。然后进行安装和配置。

至此,已经成功地配置了一台RADIUS服务器,可以支持用户kelly-user的EAP-TLS认证,可以支持本机和IP地址为202.119.22.88的机器作为客户端,共享密码为whatever。如果想要支持更多的用户或客户端,按以上的形式进行相应的修改即可。有关文件的修改可以直接手动进行,也可以根据diff格式文件,使用patch命令。

软件安装完成,客户执行申请者端程序,认证成功之后就可以享用网络服务。

上一篇:浅议SQL Server数据库的优化 下一篇:VGA同步显示在LED大屏幕系统应用设计