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

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

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

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

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