Radius认证协议(二)

报文格式

RADIUS数据包封装在UDP数据字段中, UDP的Destination Port字段为1812(十进制)。应答时,源端口和目标端口会互换。

RADIUS早期使用UDP端口1645,但与“sa-msg-port”服务冲突。RADIUS的官方端口号是1812。

RADIUS报文格式如下。字段从左到右传输。

1.Code

一个字节,标识RADIUS数据包的类型。接收到Code字段无效的数据包时,静默丢弃。

Radius Code(十进制)分配如下:

Code

报文类型

1

Access-Request

2

Access-Accept

3

Access-Reject

4

Accounting-Request

5

Accounting-Response

11

Access-Challenge

12

Status-Server (试验)

13

Status-Client (试验)

255

保留

 

2.Identifier

一个字节,有助于匹配请求和应答。在短时间内,如果RADIUS服务器收到具有相同源IP地址,源UDP端口和Identifier,则认为是重复请求。

3.Length

两个字节,表示报文长度,包括Code, Identifier, Length, Authenticator和Attribute字段。Length范围之外的字节必须被视为填充,并在接收时忽略。如果数据包短于Length字段指示的长度,则必须静默丢弃。Length最小为20,最大为4096。

4.Authenticator

16字节。先传输最重要的八位字节,用于验证RADIUS服务器的回复以及密码隐藏算法。

4.1 请求 Authenticator

在Access-Request数据包中,Authenticator是一个16字节的随机数,称为Request Authenticator。该值在密钥(客户机和RADIUS服务器的共享密钥)的生命周期内应该是不可预测和唯一的,因为如果请求与密钥的重复,则攻击者可以使用先前截获的响应进行回复。由于相同的密钥可用于对不同地理区域中的服务器的身份验证,因此Request Authenticator字段应该是全局和时间唯一性。

Access-Request数据包中的Request Authenticator值应该是不可预测的,以免攻击者诱使服务器响应可以预期的请求,然后使用该响应伪装成该服务器来响应预期的Access-Request。

尽管诸如RADIUS之类的协议无法通过实时搭线窃听攻击来防止身份验证会话被盗,但是生成唯一的不可预测的请求可以防止针对身份验证的大范围攻击。

NAS和RADIUS服务器共享一个密钥。共享密钥与紧随其后的Request Authenticator进行MD5计算,创建一个16字节的值,该值与用户输入的密码进行异或运算,异或运算的结果放在Access-Request的User-Password属性中。

4.2响应 Authenticator

Response Authenticator是Access-Accept,Access-Reject和Access-Challenge数据包中的Authenticator字段,其计算方式如下:

ResponseAuth =MD5(Code+ID+Length+RequestAuth+Attributes+共享密钥)

4.3管理提示

客户端和RADIUS服务器之间的共享密钥尽可能长而且不可预测,最好不少于16字节。这是为了防止穷举攻击。密钥不能为空(长度为0),以防止数据包伪造。

RADIUS服务器必须使用RADIUS UDP数据包的源IP地址来决定要使用哪个共享密钥,以便可以代理RADIUS请求。

用作转发代理时,必须可以在数据包的每个方向上更改数据包:

  • 转发请求时,可以添加Proxy-State属性。
  • 转发响应时,如果添加了Proxy-State属性,则必须删除其Proxy-State属性。

总是在其他Proxy-State之后添加或删除Proxy-State。 由于Access-Accept和Access-Reject是在整个数据包内容上进行身份验证的,因此添加或剥除Proxy-State属性会使数据包中的签名无效必须重新对其进行签名。

报文类型

RADIUS报文类型由数据包第一个字节的Code字段确定。

1.Access-Request

Access-Request被发送到RADIUS服务器,并携带用于确定是否允许用户访问特定的NAS以及用户请求的特定服务的信息。希望验证用户身份的应用必须发送Code字段为1(Access-Request)的RADIUS数据包。

收到有效客户端发送的Access-Request后,必须发送适当的答复。

一个Access-Request应该包含一个User-Name属性,必须包含NAS-IP-Address属性或NAS-Identifier属性(或两者都包含)。

Access-Request必须包含User-Password或CHAP-Password或State。Access-Request不得同时包含User-Password和CHAP-Password。 如果将来的扩展允许传输其他种类的身份验证信息,则可以在Access-Request中使用该属性代替User-Password或CHAP-Password。

除非请求的访问类型不涉及端口,或NAS不区分端口,否则Access-Request应该包含NAS-Port或NAS-Port-Type属性(或两者都包含)。

Access-Request可以包含其他属性作为对服务器的提示,但服务器不一定接受该提示。

当用户密码存在时,使用RSA Message Digest Algorithm MD5的方法进行加密。

Access-Request报文格式如下, 字段从左到右传输。

Code:1;

Identifier:每当对Attributes字段的内容进行了更改和收到上一个请求的有效回复时,都必须修改Identifier字段。重传,则Identifier必须保持不变。

Request Authenticator:每次使用新的Identifier时,都必须更改Request Authenticator。

Attributes:长度是可变的,包含服务类型所需的属性。

2.Access-Accept

Access-Accept由RADIUS服务器发送,携带开始向用户提供服务所需的特定配置信息。 如果Access-Request中的所有属性值都是可接受的,则RADIUS服务器必须发送一个将Code字段为2(Access-Accept)的数据包。

接收到Access-Accept时,Identifier字段必须与某一待处理的Access-Request匹配。Response Authenticator字段必须是对某一待处理的Access-Accept的正确响应。无效的数据包被静默丢弃。

Access-Accept报文格式如下, 字段从左到右传输。

Code:2;

Identifier:与Access-Accept相对应的Access-Request的Identifier字段一样。

Response Authenticator:如前所述,Response Authenticator的计算来自Access- Request值。

Attributes:长度可变,包含0或多个属性。

4.Access-Reject

如果RADIUS服务器不接受接收到的任一属性值,那么必须发送一个Code字段为3(Access-Reject)的数据包,包括一个或多个NAS可以向用户显示的Reply-Message属性(文本消息)。

Access- Reject报文格式如下, 字段从左到右传输。

Code:3;

Identifier:与Access-Reject相对应的Access-Request的Identifier字段一样。

Response Authenticator:如前所述的Response Authenticator的计算来自Access-Request值。

Attributes:长度可变,包含0或多个属性。

4.Access-Challenge

如果RADIUS服务器希望向用户发送要求响应的质询,则RADIUS服务器必须通过发送Code字段为11(Access-Challenge)的数据包来响应访问请求。

Attributes字段可以有一个或多个Reply-Message属性,一个State属性(可以没有)。也可以有Vendor-Specific、Idle-Timeout、Session-Timeout和Proxy-State。Access-Challenge中不允许包含的其他的属性。

接收到Access-Challenge时,Identifier字段必须与某一待处理的Access-Accept匹配。Response Authenticator字段必须是对某一待处理的Access-Challenge的正确响应。无效的数据包被静默丢弃。

如果NAS不支持质询/响应,则必须将Access-Challenge视为收到Access-Reject。

如果NAS支持质询/响应,则收到有效的Access-Challenge表示应该发送新的Access-Request。NAS可以向用户显示文本消息(如果有的话),然后提示用户进行响应。然后,NAS用一个新的请求ID和Request Authenticator,用用户的响应(加密)替换User-Password属性,并包括来自Access-Challenge的State属性(如果有的话),发送原来的Access-Request。一个Access-Request中只能存在0或1个State属性。

支持PAP的NAS将Reply-Message转发给拨号客户端,并接受PAP应答,该应答可以像用户输入了应答一样使用。如果NAS不能这样做,则必须将Access-Challenge视为收到Access-Reject。

Access-Accept报文格式如下, 字段从左到右传输。

Code:11;

Identifier:与Access-Reject相对应的Access-Request的Identifier字段一样。

Response Authenticator:如前所述,Response Authenticator的计算来自Access- Request值。

Attributes:长度可变,包含0或多个属性。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值