1. Radius协议
Radius协议是目前AAA服务中所使用的最广泛的协议,它对认证,授权以及计费的功能都提供支持。Radius服务器通过建立一个唯一的用户数据库,存储用户名,用户密码等一系列信息,接入用户通过发送自己的用户名,密码,证书等信息给服务器来进行认证,认证成功后,服务器会给用户下发配置信息来完成授权,并且根据配置好的计费规则对用户进行计费。只有通过认证的用户,才能访问Radius服务器上的资源。
1.1 RADIUS协议实体
- 无线终端 (Authenticating peer)
- NAS (RADIUS Client)
- RADIUS Server & Authenticator Server
1.2 RADIUS典型流程
RADIUS协议在进行处理的时候,认证过程和授权过程是在一起进行的,具体的操作是将授权信息放入到响应报文中。认证方法大致可以支持两种:
- 基于数字证书的认证方法,基于数字证书的认证方法一般是利用TLS协议建立安全通道,然后在通道中交换数据,嵌套别的认证方法。
- 基于密码的认证方法,基于密码的认证方法的例子有PAP认证和CHAP认证等。
1.3 RADIUS报文格式
- 代码(报文号)Code域占位一个字节,它用来标识Radius报文类型,下文列出了常见的代码编码与对应意义:
1 接入请求报文
2 接入成功回应报文
3 接入拒绝回应报文
4 计费请求报文
5 计费回应报文
11 接入挑战报文
12 服务器状态报文
13 客户端状态报文
255 保留
- 标识符Identifier域占位一个字节,用于匹配请求和回应报文。比如说,可以根据该值判断是否是重复请求报文,在某一个时间区间以内,如果两个报文来自于相同的地址和端口,而且具有相同的Idenfier值,则可以认定为是重复的报文。
- 长度Length,长度域占位两个字节。它包含了报文中的Code域,Identifier域,Length域,Authenticator域和属性域的总长度。如果接收到的报文的长度大于这个值,则在接收报文时忽略多出来的字节;如果长度小于这个值,则说明报文不完整,直接丢弃报文。一个Radius报文的长度在20到4095个字节的范围内。
- 认证字,Authenticator域占位16个字节。高位字节先传输。该域的值用来鉴别服务器的回应报文。
- 请求认证字:Authentictor的值是一个随机生成的16字节字符串。NAS和Radius服务器共享一个密钥,该共享密钥被加在请求认证字域后面,然后对之使用MD5算法生成一个16字节的摘要,将该摘要和用户输入的密钥进行异或,然后将异或结果放入接入请求报文的User-Password属性。
- 回应认证字:在访问接受、访问拒绝和访问挑战报文中。它的值定义为整个访问回应报文的内容和共享密钥进行MD5摘要计算得出的16字节字符串:从代码域开始,包含标识符域,长度域,接入请求报文中的请求认证字域和回应报文中的属性,然后后面加上共享密钥,即
ResponseAuth=MD5(Code+ID+Length+RequestAuth+Attributes+Secret)
- Accounting-Request认证