1、RADIUSRFC2866中文组织:中国互动出版网(http:/www.china-RFC文档中文翻译计划(http:/www.china-E-mail:ouyangchina-译者:刘伟娜(superwinner, starfield)译文发布时间:2001-3-30版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。Network Working Group C. RigneyRequest for Comments: 2866 LivingstonCategory: Informational June 2000Obsoletes:
2、 2139RADIUS(远程用户拨号认证系统)记帐协议(RFC2866 ADIUS Accounting)Status of this Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.Copyright Notice Copyright (C) The Internet Society (2000). All Rights Rese
3、rved.摘要本文描述了在网络接入服务器和共享的记帐服务器之间传送记帐信息的协议。实现RADIUS记帐协议的注意事项本文证明了RADIUS记帐协议。早期开发的RADIUS记帐协议使用的是端口号为1646的UDP端口,它和“sa-msg-port服务互相冲突。为RADIUS协议正式分配的端口号为1813。 目 录RADIUS(远程用户拨号认证系统)记帐协议 1摘要 1实现RADIUS记帐协议的注意事项 11简介 21.1 必要的说明 21.2 术语 22操作 22.1 代理 33包格式 34包的类型 44.1 记帐请求 44.2 记帐响应 45. 属性 55.1 记帐状态类型 65.2 记帐延迟
4、时间 65.3 输入字节数 75.4 输出字节数 75.5 会话Id 75.6 授权 85.7 会话时间 85.8 输入数据包 85.9 输出包总数 95.10 记帐中止事件 95.11 多会话Id 105.12 记帐链路计数 105.13 属性列表 116. IANA(国际互联网分配的数字标准)因素 127. 安全因素 128. 更改记录 129参考文献 1210. 说明 131简介 41.1 必要的说明 41.2 术语 42操作 52.1 代理 53包格式 64包的类型 74.1 记帐请求 74.2 记帐响应 85. 属性 95.1 记帐状态类型 105.2 记帐延迟时间 115.3 输入
5、字节数 115.4 输出字节数 125.5 会话Id 125.6 授权 135.7 会话时间 135.8 输入数据包 145.9 输出包总数 145.10 记帐中止事件 155.11 多会话Id 165.12 记帐链路计数 165.13 属性列表 176. IANA(国际互联网分配的数字标准)因素 197. 安全因素 198. 更改记录 199参考文献 191简介经营为众多的用户提供的串口线路和modem池会带来巨大的管理支持方面的需求。由于根据定义,modem池是通向外部世界的链路,因此它对安全、认证、记帐都有很高的要求。这些需求可以通过维护一个用户数据库来实现,该数据库包含认证(验证用户的
6、名字和密码)和配置细节为用户提供的服务的类型(如:SLIP,PPP,telnet,rlogin等)。RADIUS(远程用户拨号认证系统)文档【2】详细说明了用于认证和授权的RADIUS协议。本文扩展了RADIUS协议的应用,使其包括了从网络接入服务器给RADIUS记帐服务器传递信息的应用。本文废弃了RFC 2139【1】。它与RFC 2139之间的差别的概要在附录“更改记录”中可以找到。RADIUS记帐协议的主要特征如下:客户/服务器模式网络接入服务器是RADIUS记帐服务器的客户端。客户端负责将用户的记帐信息传递给指定的RADIUS记帐服务器。RADIUS记帐服务器负责接收记帐请求,并给客户
7、端返回一个响应信息,表明记帐请求被成功的接收。RADIUS记帐服务器可以作为其他类型的记帐服务器的代理。网络安全客户端与RADIUS记帐服务器之间的交互是通过共享密钥的使用来鉴别的,这个共享密钥根本不会通过网络传送。协议的可扩充性所有的事务都是由不同长度的属性长度值的三元组构成的。新的属性值的加入不会影响到原有协议的执行。1.1 必要的说明本文中的关键词MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, 以及OPTIONAL与RFC 2119【3】中的描述的意义是相同的。这些关键词意
8、义与其是否大写无关。1.2 术语本文使用了以下的术语:服务 网络接入服务器为拨入用户提供的某种服务,如:PPP或者Telnet。会话 网络接入服务器为拨入用户提供的每一个服务都会建立一个会话。会话的开始给出了最初提供服务的位置,会话的最后给出了服务结束的位置。如果网络接入服务器支持的话,一个用户可以有多个并行或者串行的会话。对于每一个会话,都会产生一个独立的H会话ID(AcctSessionID)。直接丢弃 这就是说应用程序不对包进行任何处理就直接丢弃。SHOULD的执行提供了记录错误的能力,其中包括了被直接丢弃的包的内容;而且,SHOULD会记录下统计计数器中的事件。2操作当一个客户端的配置
9、采用RADIUS记帐协议时,在开始提供服务的时候它会生成一个记帐包,该记帐包描述了正在提供的服务的类型以及为之提供服务的用户,它将被送至RADIUS记帐服务器。记帐服务器会返回一个表明该记帐包已经收到的应答。服务中止时,客户端会产生一个记帐中止数据包,该数据包中描述了提供的服务的类型以及随机统计报表(如:服务所用的时间、输入输出的字节数或者输入、输出包的情况)。该数据包会被送至RADIUS记帐服务器,服务器会返回一个表示该数据包已经收到的应答。记帐请求(无论是开始记帐还是中止记帐的请求)是通过网络提交给RADIUS记帐服务器的。最好是让客户端使用某种形式的后退机制,使得客户端不断的发送记帐请求
10、包直到收到应答信息为止。如果在一段时间内没有收到返回的响应信息,记帐请求就会被重发几次。如果主服务器坏掉或者是无法到达客户端可以向后备服务器转发记帐请求信息。可以规定在对主服务器重试失败一定的次数之后或者是采用循环调度算法的方式允许使用后备服务器。重试和放弃算法是目前正在研究的一个课题,在本文中就不再赘述了。RADIUS记帐服务器可以向其他的服务器发出请求,来满足记帐请求,被请求的服务器充当一个客户端。如果RADIUS记帐服务器不能成功的处理记帐包,服务器一定不能(MUST NOT)给客户端发送应答信息。2.1 代理参阅“RADIUS”RFC【2】中关于RADIUS代理的描述,RADIUS记帐
11、代理服务器的工作方式与RADIUS代理服务器是相同的,如下例所示。1 NAS向转发服务器发送记帐请求。2 转发服务器将记帐请求记录下来(如果必要的话),在其他的代理服务器的状态属性之后增加自己的代理状态信息(如果必要的话),更新鉴别码,将这些请求转发给远程服务器。3 远程服务器将记帐请求记录下(如果必要的话),将所有的代理状态属性按顺序原封不动的从请求数据报复制到响应数据包,把记帐响应送给转发服务器。4 转发服务器剥离最后的代理状态(如果在第二步加了的话),更新响应鉴别码,将记帐响应发给NAS。转发服务器不得更改当前数据包中已经存在的代理状态或者类属性。转发服务器可能以通过(pass thro
12、ugh)的方式完成转发的功能,也就是说,转发服务器一收到数据包就重新发送;或者转发服务器自身完成重发功能,例如:在转发服务器和远程服务器之间的网络链接与网络接入服务器(NAS)和转发服务器之间的链接相比有很大不同的情况。当代理服务器被用来执行转发功能的时候,要特别的注意确保转发算法是健壮的、可扩展的。3包格式严格的讲,RADIUS记帐协议包应该位于UDP数据域【4】,它的目标端口号是1813(十进制数)。当产生一个应答的时候,源端口和目的地址端口互换。本文定义了RADIUS协议。早期的RADIUS记帐是通过端口号为1646的UDP端口来实现的,它和“sa-msg-port”服务相冲突。为RAD
13、IUS记帐服务正式分配的端口号是1813。RADIUS数据格式的概况如下所示。各个域的数据是从左向右传输的。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 编码 | 标识符 | 长度 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | 鉴别码 | | | | | +-+
14、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 属性 . +-+-+-+-+-+-+-+-+-+-+-+-+-编码编码域是一个八位字节,用来标识RADIUS包的类型。当收到的包的编码域非法时,该数据包将会被自动丢弃。RADIUS记帐编码分配如下:4 记帐请求5 记帐相应标识符标识符域是一个八位字节,用于请求和应答的匹配。如果请求包具有相同的源ip地址、源UDP端口号,并且在很短的一段时间内出现了相同的标识符,RADIUS就可以检测到重复的请求。长度长度域占有两个八位的字节。它表明了该包所包含的编码、标识符、长度、
15、鉴别码以及属性域的总长度。在长度域限定的范围之外的八位字节必须作为填充字节,在接收时不予处理。如果包的实际长度小于长度域中给出的值,该包必须被直接丢弃。包的最小长度是20,最大长度是4095。鉴别码鉴别码域占有16个八位的字节。最重要的字节先传输。该域的值用来鉴别客户端和RADIUS记帐服务器之间的信息。请求鉴别码在记帐请求包中,鉴别码的值是一个占有16个八位字节的MD5【5】校验和,称作请求鉴别码。网络接入服务器(NAS)和RADIUS记帐服务器共享一个密钥。记帐请求包中的鉴别码中包含对一个由编码标识符长度16个为0的八位字节请求属性共享密钥(在这里,表示将各个字符连接起来)所构成的八位字节
16、流进行某种方式的MD5哈希计算得到的代码。这个占有16个8位字节的MD5哈希值被存储到记帐请求包的鉴别码域中。注意记帐请求中的请求鉴别码不得与RADIUS接入请求的请求鉴别码的生成方式相同,因为在记帐请求中没有用户口令这一属性。响应鉴别码在记帐响应包中的鉴别码域称作响应鉴别码。它包含对一个由记帐响应编码、标识符、长度、来自于将要被应答的记帐请求包的请求鉴别码以及响应属性(如果有的话)、共享密钥构成的八位字节流进行某种方式的MD5哈希计算得到的代码。这个占有16个8位字节的MD5哈希值被存储到记帐响应包的鉴别码域中。属性属性可能会包含多个实例,在这种情况下同种类型的各个属性的排列应当保持一定的顺
17、序。但是,不同类型的各个属性的排列顺序是任意的。4包的类型RADIUS包的类型是由位于包的第一个八位字节的编码域的值决定的。4.1 记帐请求描述记帐请求包是由客户端(典型的情况是网络接入服务器或者它的代理)送到RADIUS记帐服务器,并将用于为某个用户提供的某种服务提供记帐的信息通知RADIUS记帐服务器。客户端发送一个将编码域置为4(记帐请求)的RADIUS数据包。一收到记帐请求,如果服务器能够成功的记录下记帐包的话,必须马上发送一个记帐响应应答;如果记录记帐包失败,不得发送任何应答。在RADIUS接入请求和接入许可包中的任何有效属性出了一下的几种属性:用户密码、CHAP密码、应答信息、状态
18、不能出现在RADIUS记帐请求包中之外,其他的属性在RADIUS记帐请求包中都是有效的。在RADIUS记帐请求中必须包含NAS-IP-Address(网络接入服务器的IP地址)或者NAS-Identifer(网络接入服务器标识符)。在请求包中还应当包含NAS-port(网络接入服务器端口号)或者NAS-Port-Type(网络接入服务器端口类型)属性,或者两者都包含;除非该服务不会设计任何端口或者网络接入服务器(NAS)对它的各个端口不作区分。如果记帐请求包包含了一个Framed-IP-Address,该属性中必须包含用户的IP地址。如果接入许可使用了一个专门的值以告诉网络接入服务器(NAS)
19、为用户分配一个IP地址,记帐请求中的Framed-IP-Address(如果有的话)必须包含实际分配给用户的IP地址。记帐请求包的格式概况如下所示。各个域是自左向右传输的。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 编码 | 标识符 | 长度 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20、-+-+-+-+ | | | 请求鉴别码 | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 属性. +-+-+-+-+-+-+-+-+-+-+-+-+-编码4代表记帐请求标识符当属性域的内容发生改变或者是已经收到当前请求的有效的应答,标识符域必须改变。在内容不发生任何改变的情况下的重发,标识符必须保持不变。需要注意的是,如果记帐请求属性中包括访问延迟时间,该包重发时,访问延迟时间值会被更新。同时也改变了属性域的内容,需要新的新的标识符和请求鉴别码。请求鉴别码记帐请求的请求鉴别码是一个占有1
21、6个8位字节的MD5哈希值,该值的计算方法已在上述的“请求鉴别码”中给出。属性属性域的长度各不相同,其中包含着一系列的属性。4.2 记帐响应描述记帐响应包是由RADIUS记帐服务器发给客户端的,用来通知客户端记帐请求已被接收,并且成功的记录下来。如果记帐请求被成功的记录下来,RADIUS记帐服务器必须发送一个编码域被置为5(记帐响应)的数据包。客户端一收到记帐响应,标识符域就会去和一个等待应答的记帐请求相匹配。响应鉴别码域必须含有对等待应答的记帐请求的正确响应。无效的数据包会被直接丢弃。RADIUS记帐响应不需要任何属性。响应数据包的格式概况如下所示。各个域是自左向右传输的。0 1 2 3 0
22、 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 编码 | 标识符 | 长度 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | 响应鉴别码 | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
23、 | 属性 . +-+-+-+-+-+-+-+-+-+-+-+-+-编码5代表记帐响应标识符标识符域是对引起这次响应的记帐请求的标识符域的一个拷贝。响应鉴别码记帐响应的响应鉴别码是一个占有16个8位字节的MD5哈希值,该值的计算方法已在上述的“响应鉴别码”中给出。属性属性域的长度各不相同,它可能包含了一系列的零或者更多的属性。5. 属性RADIUS属性包括有请求和响应的鉴别、授权、记帐方面的详细信息。有些属性可能会不止一次的被包括进去。这样做的结果是该属性在每个属性域中都得到详尽的描述。属性列表的结束是由RADIUS包的长度来决定的。属性域格式的概况如下所示。各个域是自左向右发送的。 0 1
24、2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 类型 | 长度 | 值 . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+类型类型域是一个八位字节。到目前为止,RADIUS类型域的值在最新的“Assigned Number”RFC【6】中给出了详细的描述。192223是留给实验使用的,224240用于描述执行的细节,241255是预留的,不能使用。本文中涉及到一下的数值:139 (参考RA
25、DIUS document【2】)40 记帐状态类型41 记帐延迟时间42 输入字节数43 输出字节数44 会话ID45 授权46 会话时间47 输入包总数48 输出包总数49 记帐中止事件50 多会话ID51 记帐链路计数60 (参考RADIUS document【2】)长度长度域占有一个字节,表示包括类型、长度、属性值在内的属性的长度。如果收到的记帐请求属性的长度无效,整个请求必须直接丢弃。值属性值域有零个或者更多的字节,包含有属性信息的详细描述。值域的格式和长度是由类型和长度域决定的。注意,在RADIUS中没有任何的类型是以NUL(十六进制的00)结尾的。在RADIUS中特别是“text
26、”和“string类型不能以NUL(十六进制的00)结尾。属性具有长度域,因而不必使用中止符号。文本(text)含有用UTF8编码的10646【7】的特性,字符串(string)含有8位二进制数据。服务器和客户端必须能够处理嵌入的null。在使用C语言编写RADIUS程序时,注意不要使用strcpy()来处理字符串。值域的格式是五种数据类型之一。注意:类型“text”是类型“string的一个子集。text 1253个字节,包含UTF8编码的1046【7】特性。长度为零的文本(text)不必发送;取而代之的是,整个属性域会被直接忽略。string 1253个字节,包含二进制数据(数值值从0到十
27、进制数255)。长度为零的字符串(string)不必发送;取而代之的是,整个属性域会被直接忽略。address 32位的数值,最重要的字节优先。integer 32位的无符号数,最重要的字节优先。time 32位的无符号数,最重要的字节优先seconds since 00:00:00 UTC, January 1, 1970。标准的属性是不使用该数据类型的,但是在这里提到该数据类型主要是以备在将来的属性中使用。5.1 记帐状态类型描述该属性表明当前的记帐请求是表示用户服务开始(start)还是结束(stop)。它可能被客户端通过指出记帐开始的方式来表示开始记帐(例如:在启动之前),或者通过指明
28、记帐完成的方式来结束记帐(例如:在预定的重新启动之前)。记帐状态类型的格式概况如下所示。各个域是按照自左向右的顺序发送的。0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 类型 | 长度 | 值 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 值(cont) | +-+-+-+-+-+
29、-+-+-+-+-+-+-+-+-+-+-+类型40表示记帐状态长度6值值域占有四个字节。1 Start(开始)2 Stop(停止)3 Interim-Update(过渡更新)7 Accounting-On(开始记帐)8 Accounting-Off(结束记帐)914 Reserved for Tunnel Accounting(为隧道记帐保留)15 Reserved for Failed(为记帐失败预留)5.2 记帐延迟时间描述该属性表明客户端试图发送该记录所用的时间。用该数据包到达服务器端的时间减去记帐延迟时间就可以知道生成该数据包的大概时间。(网络传输时间被忽略了)。注意,记帐延迟时间的
30、改变会引起鉴别码的变化;详细资料参见上面关于鉴别码的讨论。记帐延迟时间的格式概况如下所示。各个域是按照自左向右的顺序发送的。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 类型 | 长度 | 值 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 值 (cont) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+类型41代表记帐延迟时间长度6值值域共占有四个字节5.3 输入字节数描述该属性表明在提供用户所需的服务的过程中从端口接收到的字节总数。该属性只有在要求停止记帐的记帐请求数据包中才会出现。输入字节数的基本格式如下所示。各个域是自左向右传送的。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1