Radius认证原理
Radius认证原理
Radius简介
RADIUS(Remote Authentication Dial In User Service,远程用户拨号认证)是一种广泛支持的客户机-服务器协议,提供集中的身份验证、授权和计费功能。RADIUS服务器使用UDP报文与网络中的RADIUS客户端通信,在允许用户访问网络之前对用户进行认证,授权适当的用户访问资源,并对所使用的资源进行说明。
Radius报文格式及交互过程
Radius报文格式

Code:表示Radius报文的类型:
- Code = 1: Access-Request,认证请求报文;
- Code = 2: Access-Accept,认证成功报文;
- Code = 3: Access-Reject,认证拒绝报文;
- Code = 4: Accounting-Request,计费请求报文;
- Code = 5: Accounting-Response,计费响应报文;
- Code = 11: Access-Challenge,认证挑战报文;
- Code = 255: Reserved,保留;
Packet Identifier:用于匹配请求和回应报文。
Packet Length:Radius报文长度;
Authenticator:用于认证来自服务端的响应,也用于用户密码的加密处理;
AVPs:属性字段,用于RADIUS服务器和RADIUS客户端之间的信息交换,Fortinet RADIUS属性的供应商ID是12356。
Radius报文交互过程

FortiGate向RADIUS服务器发送包含用户名和密码信息的认证请求报文。
RADIUS服务器对用户身份的合法性进行检验:
如果用户身份合法,RADIUS服务器向FortiGate返回认证接受报文。
如果用户身份不合法,RADIUS服务器向RADIUS客户端返回认证拒绝报文。
PAP和CHAP认证
PAP认证
在认证请求报文Access-Request报文中,PAP将用户和加密后的密码传递给Radius服务器。

Radius服务器将解密后的密码,与用户的密码进行比较,如果一致, 则认为密码正确。

CHAP认证
重要
CHAP认证传递的是一个HASH值,不是密码,因此这要求用户的密码保存在Radius服务器本地。如果Radius服务器用户的密码不在本地,如FortiGate----Radius服务器----LDAP服务器,像这样的部署方式,用户的密码保存在LDAP服务器中,Radius服务器无法获取LDAP服务器中用户的密码,因此认证将失败。
在认证请求报文Access-Request报文中,CHAP认证并不会直接在认证过程传递用户密码, 而是传递 chapID + 密码 + challenge的MD5值。

Radius服务器通过用户名找到对应的密码,计算chapID + 密码 + challenge的MD5值, 并判断是否与 chap-password一致(从第2个字节开始比较),如果一致, 则认为密码正确。
