RADIUSRFC2866中文文档格式.docx
《RADIUSRFC2866中文文档格式.docx》由会员分享,可在线阅读,更多相关《RADIUSRFC2866中文文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
服务互相冲突。
为RADIUS协议正式分配的端口号为1813。
目录
RADIUS(远程用户拨号认证系统)记帐协议1
摘要1
实现RADIUS记帐协议的注意事项1
1.简介2
1.1必要的说明2
1.2术语2
2.操作2
2.1代理3
3.包格式3
4.包的类型4
4.1记帐请求4
4.2记帐响应4
5.属性5
5.1记帐状态类型6
5.2记帐延迟时间6
5.3输入字节数7
5.4输出字节数7
5.5会话Id7
5.6授权8
5.7会话时间8
5.8输入数据包8
5.9输出包总数9
5.10记帐中止事件9
5.11多会话Id10
5.12记帐链路计数10
5.13属性列表11
6.IANA(国际互联网分配的数字标准)因素12
7.安全因素12
8.更改记录12
9.参考文献12
10.说明13
1.简介4
1.1必要的说明4
1.2术语4
2.操作5
2.1代理5
3.包格式6
4.包的类型7
4.1记帐请求7
4.2记帐响应8
5.属性9
5.1记帐状态类型10
5.2记帐延迟时间11
5.3输入字节数11
5.4输出字节数12
5.5会话Id12
5.6授权13
5.7会话时间13
5.8输入数据包14
5.9输出包总数14
5.10记帐中止事件15
5.11多会话Id16
5.12记帐链路计数16
5.13属性列表17
6.IANA(国际互联网分配的数字标准)因素19
7.安全因素19
8.更改记录19
9.参考文献19
1.简介
经营为众多的用户提供的串口线路和modem池会带来巨大的管理支持方面的需求。
由于根据定义,modem池是通向外部世界的链路,因此它对安全、认证、记帐都有很高的要求。
这些需求可以通过维护一个用户数据库来实现,该数据库包含认证(验证用户的名字和密码)和配置细节——为用户提供的服务的类型(如:
SLIP,PPP,telnet,rlogin等)。
RADIUS(远程用户拨号认证系统)文档【2】详细说明了用于认证和授权的RADIUS协议。
本文扩展了RADIUS协议的应用,使其包括了从网络接入服务器给RADIUS记帐服务器传递信息的应用。
本文废弃了RFC2139【1】。
它与RFC2139之间的差别的概要在附录“更改记录”中可以找到。
RADIUS记帐协议的主要特征如下:
客户/服务器模式
网络接入服务器是RADIUS记帐服务器的客户端。
客户端负责将用户的记帐信息传递给指定的RADIUS记帐服务器。
RADIUS记帐服务器负责接收记帐请求,并给客户端返回一个响应信息,表明记帐请求被成功的接收。
RADIUS记帐服务器可以作为其他类型的记帐服务器的代理。
网络安全
客户端与RADIUS记帐服务器之间的交互是通过共享密钥的使用来鉴别的,这个共享密钥根本不会通过网络传送。
协议的可扩充性
所有的事务都是由不同长度的属性-长度-值的三元组构成的。
新的属性值的加入不会影响到原有协议的执行。
1.1必要的说明
本文中的关键词"
MUST"
"
MUSTNOT"
REQUIRED"
SHALL"
SHALLNOT"
SHOULD"
SHOULDNOT"
RECOMMENDED"
MAY"
以及"
OPTIONAL"
与RFC2119【3】中的描述的意义是相同的。
这些关键词意义与其是否大写无关。
1.2术语
本文使用了以下的术语:
服务网络接入服务器为拨入用户提供的某种服务,如:
PPP或者Telnet。
会话网络接入服务器为拨入用户提供的每一个服务都会建立一个会话。
会话的开始给出了最初提供服务的位置,会话的最后给出了服务结束的位置。
如果网络接入服务器支持的话,一个用户可以有多个并行或者串行的会话。
对于每一个会话,都会产生一个独立的H会话ID(Acct-Session-ID)。
直接丢弃
这就是说应用程序不对包进行任何处理就直接丢弃。
SHOULD的执行提供了记录错误的能力,其中包括了被直接丢弃的包的内容;
而且,SHOULD会记录下统计计数器中的事件。
2.操作
当一个客户端的配置采用RADIUS记帐协议时,在开始提供服务的时候它会生成一个记帐包,该记帐包描述了正在提供的服务的类型以及为之提供服务的用户,它将被送至RADIUS记帐服务器。
记帐服务器会返回一个表明该记帐包已经收到的应答。
服务中止时,客户端会产生一个记帐中止数据包,该数据包中描述了提供的服务的类型以及随机统计报表(如:
服务所用的时间、输入输出的字节数或者输入、输出包的情况)。
该数据包会被送至RADIUS记帐服务器,服务器会返回一个表示该数据包已经收到的应答。
记帐请求(无论是开始记帐还是中止记帐的请求)是通过网络提交给RADIUS记帐服务器的。
最好是让客户端使用某种形式的后退机制,使得客户端不断的发送记帐请求包直到收到应答信息为止。
如果在一段时间内没有收到返回的响应信息,记帐请求就会被重发几次。
如果主服务器坏掉或者是无法到达客户端可以向后备服务器转发记帐请求信息。
可以规定在对主服务器重试失败一定的次数之后或者是采用循环调度算法的方式允许使用后备服务器。
重试和放弃算法是目前正在研究的一个课题,在本文中就不再赘述了。
RADIUS记帐服务器可以向其他的服务器发出请求,来满足记帐请求,被请求的服务器充当一个客户端。
如果RADIUS记帐服务器不能成功的处理记帐包,服务器一定不能(MUSTNOT)给客户端发送应答信息。
2.1代理
参阅“RADIUS”RFC【2】中关于RADIUS代理的描述,RADIUS记帐代理服务器的工作方式与RADIUS代理服务器是相同的,如下例所示。
1.NAS向转发服务器发送记帐请求。
2.转发服务器将记帐请求记录下来(如果必要的话),在其他的代理服务器的状态属性之后增加自己的代理状态信息(如果必要的话),更新鉴别码,将这些请求转发给远程服务器。
3.远程服务器将记帐请求记录下(如果必要的话),将所有的代理状态属性按顺序原封不动的从请求数据报复制到响应数据包,把记帐响应送给转发服务器。
4.转发服务器剥离最后的代理状态(如果在第二步加了的话),更新响应鉴别码,将记帐响应发给NAS。
转发服务器不得更改当前数据包中已经存在的代理状态或者类属性。
转发服务器可能以通过(passthrough)的方式完成转发的功能,也就是说,转发服务器一收到数据包就重新发送;
或者转发服务器自身完成重发功能,例如:
在转发服务器和远程服务器之间的网络链接与网络接入服务器(NAS)和转发服务器之间的链接相比有很大不同的情况。
当代理服务器被用来执行转发功能的时候,要特别的注意确保转发算法是健壮的、可扩展的。
3.包格式
严格的讲,RADIUS记帐协议包应该位于UDP数据域【4】,它的目标端口号是1813(十进制数)。
当产生一个应答的时候,源端口和目的地址端口互换。
本文定义了RADIUS协议。
早期的RADIUS记帐是通过端口号为1646的UDP端口来实现的,它和“sa-msg-port”服务相冲突。
为RADIUS记帐服务正式分配的端口号是1813。
RADIUS数据格式的概况如下所示。
各个域的数据是从左向右传输的。
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|编码|标识符|长度|
||
|鉴别码|
|属性...
+-+-+-+-+-+-+-+-+-+-+-+-+-
编码
编码域是一个八位字节,用来标识RADIUS包的类型。
当收到的包的编码域非法时,该数据包将会被自动丢弃。
RADIUS记帐编码分配如下:
4记帐请求
5记帐相应
标识符
标识符域是一个八位字节,用于请求和应答的匹配。
如果请求包具有相同的源ip地址、源UDP端口号,并且在很短的一段时间内出现了相同的标识符,RADIUS就可以检测到重复的请求。
长度
长度域占有两个八位的字节。
它表明了该包所包含的编码、标识符、长度、鉴别码以及属性域的总长度。
在长度域限定的范围之外的八位字节必须作为填充字节,在接收时不予处理。
如果包的实际长度小于长度域中给出的值,该包必须被直接丢弃。
包的最小长度是20,最大长度是4095。
鉴别码
鉴别码域占有16个八位的字节。
最重要的字节先传输。
该域的值用来鉴别客户端和RADIUS记帐服务器之间的信息。
请求鉴别码
在记帐请求包中,鉴别码的值是一个占有16个八位字节的MD5【5】校验和,称作请求鉴别码。
网络接入服务器(NAS)和RADIUS记帐服务器共享一个密钥。
记帐请求包中的鉴别码中包含对一个由编码+标识符+长度+16个为0的八位字节+请求属性+共享密钥(在这里,+表示将各个字符连接起来)所构成的八位字节流进行某种方式的MD5哈希计算得到的代码。
这个占有16个8位字节的MD5哈希值被存储到记帐请求包的鉴别码域中。
注意记帐请求中的请求鉴别码不得与RADIUS接入请求的请求鉴别码的生成方式相同,因为在记帐请求中没有用户口令这一属性。
响应鉴别码
在记帐响应包中的鉴别码域称作响应鉴别码。
它包含对一个由记帐响应编码、标识符、长度、来自于将要被应答的记帐请求包的请求鉴别码以及响应属性(如果有的话)、共享密钥构成的八位字节流进行某种方式的MD5哈希计算得到的代码。
这个占有16个8位字节的MD5哈希值被存储到记帐响应包的鉴别码域中。
属性
属性可能会包含多个实例,在这种情况下同种类型的各个属性的排列应当保持一定的顺序。
但是,不同类型的各个属性的排列顺序是任意的。
4.包的类型
RADIUS包的类型是由位于包的第一个八位字节的编码域的值决定的。
4.1记帐请求
描述
记帐请求包是由客户端(典型的情况是网络接入服务器或者它的代理)送到RADIUS记帐服务器,并将用于为某个用户提供的某种服务提供记帐的信息通知RADIUS记帐服务器。
客户端发送一个将编码域置为4(记帐请求)的RADIUS数据包。
一收到记帐请求,如果服务器能够成功的记录下记帐包的话,必须马上发送一个记帐响应应答;
如果记录记帐包失败,不得发送任何应答。
在RADIUS接入请求和接入许可包中的任何有效属性出了一下的几种属性:
用户密码、CHAP密码、应答信息、状态不能出现在RADIUS记帐请求包中之外,其他的属性在RADIUS记帐请求包中都是有效的。
在RADIUS记帐请求中必须包含NAS-IP-Address(网络接入服务器的IP地址)或者NAS-Identifer(网络接入服务器标识符)。
在请求包中还应当包含NAS-port(网络接入服务器端口号)或者NAS-Port-Type(网络接入服务器端口类型)属性,或者两者都包含;
除非该服务不会设计任何端口或者网络接入服务器(NAS)对它的各个端口不作区分。
如果记帐请求包包含了一个Framed-IP-Address,该属性中必须包含用户的IP地址。
如果接入许可使用了一个专门的值以告诉网络接入服务器(NAS)为用户分配一个IP地址,记帐请求中的Framed-IP-Address(如果有的话)必须包含实际分配给用户的IP地址。
记帐请求包的格式概况如下所示。
各个域是自左向右传输的。
|请求鉴别码|
|属性...
4代表记帐请求
当属性域的内容发生改变或者是已经收到当前请求的有效的应答,标识符域必须改变。
在内容不发生任何改变的情况下的重发,标识符必须保持不变。
需要注意的是,如果记帐请求属性中包括访问延迟时间,该包重发时,访问延迟时间值会被更新。
同时也改变了属性域的内容,需要新的新的标识符和请求鉴别码。
记帐请求的请求鉴别码是一个占有16个8位字节的MD5哈希值,该值的计算方法已在上述的“请求鉴别码”中给出。
属性域的长度各不相同,其中包含着一系列的属性。
4.2记帐响应
记帐响应包是由RADIUS记帐服务器发给客户端的,用来通知客户端记帐请求已被接收,并且成功的记录下来。
如果记帐请求被成功的记录下来,RADIUS记帐服务器必须发送一个编码域被置为5(记帐响应)的数据包。
客户端一收到记帐响应,标识符域就会去和一个等待应答的记帐请求相匹配。
响应鉴别码域必须含有对等待应答的记帐请求的正确响应。
无效的数据包会被直接丢弃。
RADIUS记帐响应不需要任何属性。
响应数据包的格式概况如下所示。
0123
|响应鉴别码|
5代表记帐响应
标识符域是对引起这次响应的记帐请求的标识符域的一个拷贝。
记帐响应的响应鉴别码是一个占有16个8位字节的MD5哈希值,该值的计算方法已在上述的“响应鉴别码”中给出。
属性域的长度各不相同,它可能包含了一系列的零或者更多的属性。
5.属性
RADIUS属性包括有请求和响应的鉴别、授权、记帐方面的详细信息。
有些属性可能会不止一次的被包括进去。
这样做的结果是该属性在每个属性域中都得到详尽的描述。
属性列表的结束是由RADIUS包的长度来决定的。
属性域格式的概况如下所示。
各个域是自左向右发送的。
012
012345678901234567890123
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|类型|长度|值...
类型
类型域是一个八位字节。
到目前为止,RADIUS类型域的值在最新的“AssignedNumber”RFC【6】中给出了详细的描述。
192-223是留给实验使用的,224-240用于描述执行的细节,241-255是预留的,不能使用。
本文中涉及到一下的数值:
1-39(参考RADIUSdocument【2】)
40记帐状态类型
41记帐延迟时间
42输入字节数
43输出字节数
44会话ID
45授权
46会话时间
47输入包总数
48输出包总数
49记帐中止事件
50多会话ID
51记帐链路计数
60+(参考RADIUSdocument【2】)
长度域占有一个字节,表示包括类型、长度、属性值在内的属性的长度。
如果收到的记帐请求属性的长度无效,整个请求必须直接丢弃。
值
属性值域有零个或者更多的字节,包含有属性信息的详细描述。
值域的格式和长度是由类型和长度域决定的。
注意,在RADIUS中没有任何的类型是以NUL(十六进制的00)结尾的。
在RADIUS中特别是“text”和“string"
类型不能以NUL(十六进制的00)结尾。
属性具有长度域,因而不必使用中止符号。
文本(text)含有用UTF-8编码的10646【7】的特性,字符串(string)含有8位二进制数据。
服务器和客户端必须能够处理嵌入的null。
在使用C语言编写RADIUS程序时,注意不要使用strcpy()来处理字符串。
值域的格式是五种数据类型之一。
注意:
类型“text”是类型“string"
的一个子集。
text1-253个字节,包含UTF-8编码的1046【7】特性。
长度为零的文本(text)不必发送;
取而代之的是,整个属性域会被直接忽略。
string1-253个字节,包含二进制数据(数值值从0到十进制数255)。
长度为零的字符串(string)不必发送;
address32位的数值,最重要的字节优先。
integer32位的无符号数,最重要的字节优先。
time32位的无符号数,最重要的字节优先——secondssince00:
00:
00UTC,January1,1970。
标准的属性是不使用该数据类型的,但是在这里提到该数据类型主要是以备在将来的属性中使用。
5.1记帐状态类型
该属性表明当前的记帐请求是表示用户服务开始(start)还是结束(stop)。
它可能被客户端通过指出记帐开始的方式来表示开始记帐(例如:
在启动之前),或者通过指明记帐完成的方式来结束记帐(例如:
在预定的重新启动之前)。
记帐状态类型的格式概况如下所示。
各个域是按照自左向右的顺序发送的。
|类型|长度|值
值(cont)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40表示记帐状态
6
值域占有四个字节。
1Start(开始)
2Stop(停止)
3Interim-Update(过渡更新)
7Accounting-On(开始记帐)
8Accounting-Off(结束记帐)
9-14ReservedforTunnelAccounting(为隧道记帐保留)
15ReservedforFailed(为记帐失败预留)
5.2记帐延迟时间
该属性表明客户端试图发送该记录所用的时间。
用该数据包到达服务器端的时间减去记帐延迟时间就可以知道生成该数据包的大概时间。
(网络传输时间被忽略了)。
注意,记帐延迟时间的改变会引起鉴别码的变化;
详细资料参见上面关于鉴别码的讨论。
记帐延迟时间的格式概况如下所示。
值(cont)|
41代表记帐延迟时间
值域共占有四个字节
5.3输入字节数
该属性表明在提供用户所需的服务的过程中从端口接收到的字节总数。
该属性只有在要求停止记帐的记帐请求数据包中才会出现。
输入字节数的基本格式如下所示。
各个域是自左向右传送的。
+-+-+-+-+-+-+-+-+-+-+-+-+-+