⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 中文rfc2865.txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
一旦客户端收到此类信息,它会选择使用RADIUS协议进行认证。之后,客户端创建一个“接入请求"数据包,此包包含了诸如像用户名、用户密码、客户机ID、用户正在访问的端口编号。当密码出现时,有一种基于RSA实验室的信息分类算法(Message Digest Algorithm)MD5[3]的方法对其加密。
“接入请求”是通过网络提交给RADIUS服务器。如果在一定长度的时间里,服务器没有返回响应信息,请求会被重复传输许多次。在主服务器故障或不能连接到的情况下,客户端也可以继续向一个或多个后备服务器发出请求。后备服务器在多次尝试连接主服务器失败后,或在一轮循环方式结束后被选择连接。重试和回退算法是当前研究的课题,本文不对它做详细说明。
一旦RADIUS服务器收到请求信息,它会对传输信息的客户端进行验证。一个来自没有和RADIUS服务器具有共享机密的客户端请求,该数据包会被简单的丢弃。如果客户端是合法的,RADIUS服务器会查询用户数据库找到这个用户,把查询到的用户名同请求中的进行比较。数据库中的用户记录包含了一组对用户来说必须满足的用户接入条件,它不只是包含用户的密码验证信息,而且也可以指定允许接入的客户端和端口号。
在为了满足某个请求时,RADIUS服务器也可以作为客户端,向其他服务器传输请求。
如果任何“代理状态(Proxy-State)”属性出现在接入请求数据包中,它们都必须在不做任何更改和保持原顺序的前提下拷贝到响应数据包中。其他属性可以放到“代理状态(Proxy-State)”属性的前面、后面甚至是中间。
如果有任何条件没有得到满足,RADIUS服务器会发出一个“接入拒绝(Access-Reject)"响应,表示该用户请求是无效的。如果要求的话,RADIUS服务器可以在接入拒绝响应中包含文本消息,此文本消息可以通过客户端显示给用户。除了代理状态(Proxy-State)属性外没有任何其他属性允许存在于接入拒绝(Access-Reject)响应中。
如果所有的条件被满足而且服务器会传输一个用户必须响应的盘问,因此RADIUS服务器会传输一个“接入盘问(Access Challenge)”响应。它或许会包含一个文本信息,可以在用户端向用户显示的响应提示,并可以包含一种状态属性。
如果客户端收到接入盘问而且支持“盘问/响应(challenge/respond)”,如果有的话,它会向用户显示文本信息,并提示用户做出响应。然后,客户端再次提交一个包含新请求号的源接入请求,并用加密响应代替用户密码属性,如果有的话,还包括来自接入盘问的状态属性。状态属性应该仅有0或1两个常数出现在一个请求中。服务器可以用“接入接受(Access-Accept)"、“接入拒绝(Access-Reject)"或“接入盘问(Access-Challenge)"对这个新接入请求进行响应。
如果所有的条件都被满足,用户的配置值表被置于接入允许响应中。这些值包含了服务类型(如:串行线路接口协议(SLIP),点对点传输协议(PPP),登录用户(Login User))和交付要求服务的所有必须值。对串行线路接口协议(SLIP)和点对点传输协议(PPP)来说,这些值也许包括诸如IP地址、子网掩码、最大传输单元(MTU),要求压缩率和指定的包过滤标志。对字符模式的用户,这些值或许还包括请求的协议和主机。

2.1盘问/响应
    在盘问响应认证过程中,用户被给予一个不可预知的数字,并要求对此数字加密后返回结果。已授权用户装备有特殊的设备,如智能卡或软件,它们能不费力的计算出正确响应结果。没有授权的用户仅仅只能对响应进行猜测,因为他们缺少适当的设备或软件和必需的密钥知识来模拟此种设备或软件。
    接入盘问报文典型地包含一个回复信息,此信息中包括一个可以显示给用户的盘问,例如一个不可能被重复的数值。典型的情况是来自扩展服务器,扩展服务器是知道那一类鉴别码对应这个已经被授权的用户,因此能选择一个适当基数和长度的随机的或不重复的伪随机数。
    用户然后把这个盘问(不重复的数值)输入到他的设备或软件中,并计算出一个响应值,用户将此值输入到客户端,由客户端通过第二个接入请求数据包把它提交给RADIUS服务器。如果响应报文是与RADIUS服务器预期的响应报文匹配,则服务器会回送一个接入允许数据包,否则是回送接入拒绝数据包。
    例如,网络接入服务器传输一个接入请求数据包给RADIUS服务器,包中包含网络接入服务器的标识,网络接入服务器的端口号,用户名,用户密码(此密码或许是一个像“challenge”似的固定字符串,或者是被忽略的)。服务器送回一个具有状态和回复消息的接入盘问数据包,其中回复消息包含有 “challenge 12345678,在提示处输入你的响应值”信息,这几行信息可由接入服务器显示给用户。网络接入服务器(NAS)为这个响应提供提示信息,传输一个新的接入请求给服务器(用新的包编号),包括NAS标识、NAS端口号、用户名、用户密码(刚才由用户输入的响应值,现在已经加密),和来自服务器端接入盘问中相同的状态属性。根据判断响应值是否与要求的值匹配,服务器送回一个接入允许或接入拒绝数据包,或者甚至会传输另一个接入盘问数据包。
2.2 用不加密验证和加密验证配合动作
     对口令验证协议(PAP),NAS采取了PAP ID和密码,在一个接入请求包中将它们作为用户名和用户密码传输出去。NAS可以包含服务类型属性Attribute Service-Type= Framed-User,和Framed-Protocol=PPP作为一个提示告诉RADIUS服务器PPP服务是所希望的服务。
    对质询握手身份认证协议(CHAP),NAS创建一个随机质询(最好是是16个字节),然后把它传输给用户,用户返回一个带有CHAP ID和CHAP用户名的CHAP响应。NAS随后传输一个请求接入数据包给RADIUS服务器,该请求包中,CHAP用户名称替代了用户名(User-Name)、CHAP ID和加密的响应值代替CHAP密码(CHAP-Password)(属性3 )。随机质询或者被包含在CHAP盘问(CHAP-Challenge)属性中,或者如果它是16个字节长,它可被放到接入请求数据包中的请求鉴别码(Request Authenticator)域中。NAS可以包含Attribute Service-Type=Framed-User,和Framed-Protocol=PPP作为一个提示告诉RADIUS服务器PPP服务是所希望的服务。
    RADIUS服务器根据用户名检查对应的密码,加密盘问,用MD5算法对CHAP ID字节,前面找到的密码和CHAP盘问(如果在CHAP盘问属性存在则来自与此,否则来自请求认证者),把这个结果与CHAP密码进行比较。如果它们是相匹配,服务器送回一个接入允许数据包,否则送回一个接入拒绝数据包。
    如果RADIUS服务器不能执行被请求的认证,它一定返回一个接入拒绝数据包。例如,CHAP要求以明文方式给服务器传输密码,以便它能加密CHAP盘问并与CHAP响应相比较。如果不是以明文传输密码,服务器一定会给客户端传输一个接入拒绝包。

2.3 代理
对RADIUS代理服务器来说,一个RADIUS服务器在收到一个来自RADIUS客户端(例如NAS服务器)的验证请求(或者记账请求)后,向一个远程的RADIUS服务器提交该请求,收到来自远程服务器的回复后,将这个回复传输给客户,这个回复可能带有反映本地管理策略的变化。使用RADIUS代理服务器通常是为了漫游。漫游功能使两个或更多的管理实体允许每一个用户为某项服务而拨入到任一个实体网络中。
    NAS传输RADIUS接入请求给“转送服务器(forwarding server)”,转送服务器把这个请求转送给“远程服务器(remote server)”。远程服务器送回一个响应(接入允许、接入拒绝、接入质询)给转送服务器,转送服务器再把这个响应返回给NAS。对于RADIUS代理操作,用户名属性可以包含一个网络接口标识符[8]。哪一个服务器应该接收转送请求是根据认证域确定。认证域可以是网络接口标识符(指定的域)的一部分。或者,哪个服务器接收转送请求的选择可以基于任何一种转送服务器指定使用的标准,例如“调用站编号(Called-Station Id)”。
    一个RADIUS服务器可以同时作为转送服务器和远程服务器运行。在某些域中作为一个转发服务器,在其他域中作为一个远程服务器。一个转发服务器可以作为任何数量远程服务器的转发者。一个远程服务器可以有任意数量的转发服务器向它转发,也能向任意数量域提供认证。一个转发服务器可以向另一个转发服务器转发,从而生成一个代理链,应当注意避免循环引用。
  下面的过程解释了一个代理服务器在一个NAS服务器、转发服务器和远程服务器之间的通信。
1.NAS向一个转发服务器发出接入请求。
    2.转发服务器把这个请求转发给一个远程服务器。
    3.远程服务器给转发服务器送回接入允许、接入拒绝或接入盘问。在这个例子中,服务器送回的是接入允许。
    4.转发服务器将接入允许传输给NAS。
    转发服务器必须把已经存在于数据包中的任何代理状态属性当作不可见的数据。它的操作禁止依靠被前面服务器添加到代理状态属性中的内容
    如果收到来自客户端的请求中有任何代理状态属性,在给客户端的回复中,转发服务器必须在给客户端的回复中包括这些代理状态属性。当转发服务器转发这个请求时,它可以把代理状态属性包含在其中,也可以在已转发的请求中忽略代理状态属性。如果转发服务器在转发的接入请求中忽略了代理状态属性,它必须在响应返回给用户之前把这些代理状态属性添加到该响应中。
    现在我们更为详细地说明每一步。
    1.NAS传输它的接入请求给转发服务器。如果用户密码存在,转发服务器会用与NAS共有的密钥对用户密码进行解密。如果在数据包中有一个CHAP密码属性存在,没有CHAP盘问属性存在,转发服务器必须保证请求鉴别码完整的情况下,或者把它拷贝到CHAP盘问属性中。
    转发服务器可以向数据包添加一个代理状态属性(只能添加一个)。如果它添加了代理状态,该代理状态只能出现在数据包中任何其他代理状态属性之后。转发服务器禁止修改任何其他已经存在于数据包中的代理状态属性(转发服务器可以选择不转发它们,但一定不能对它们修改)。转发服务器禁止改变包括代理状态在内的同种类型任何属性的顺序。
    2.如果用户密码存在的话,转发服务器用和远程服务器共有的密钥对用户密码进行加密。它还会根据要求设置标识,向远程服务器转发接入请求。
    3.远程服务器(如果是最终目标服务器)会使用用户密码、CHAP密码或者是将来扩
展时指定的一些方法验证用户的合法性,然后返回接入允许、接入拒绝或者接入盘问给转发
服务器。对于这个例子,远程服务器传输的是一个接入允许数据包,远程服务器必须按照原
有的顺序而且不做任何修改的情况下,把所有的代理状态属性从接入请求中拷贝到响应数据
包中。
    4.转发服务器使用它与远程服务器共有的密钥对响应鉴别码(Response Authenticator)
进行验证,如果验证失败,它会简单的将数据包丢弃。如果验证通过,转发服务器去掉最后
的代理状态(如果数据包内它附加过一个),使用它与NAS共有的密钥签发响应鉴别码,恢
复标识使它与NAS传输的源请求标识匹配,然后传输接入允许给NAS。
    转发服务器可能修改属性以执行本地策略。关于这种策略的讨论是在这篇文档范围之
外,而且是受以下限制的。转发服务器禁止修改数据包中存在的代理状态、状态或类别属性。
    转发服务器的实施者应该认真考虑什么样的值可以做为服务类型(Service-Type)接受。         对在代理请求允许中通过NAS提示的服务种类或管理的服务种类一起传输服务种类的结果
要给与认真的考虑,而且实施者希望可以提供一些机制阻止那些以上提到的这些种类,或者
是其他的服务种类,或者是其他的属性。关于这些机制的讨论不是在本文档范围之内的。
2.4 为什么使用UDP
     一个经常问到的问题是为什么使用UDP而不是TCP作为传输协议。选择UDP是基于严格的技术上的原因。
    这有许多必须被理解的论点。RADIUS是一个事务,基于几个具有有趣特点的协议。
    1.如果向主验证服务器发出的请求失败,则必须查找备用服务器。
    为了满足这个要求,考虑到向备用服务器传输请求,请求副本必须保留在传输层。
这意味着重发计时器仍然是需要的。
 2.这个特别协议的计时要求与TCP所提供的有较大的不同。
    在一种极端的情况下,RADIUS不做丢失数据的响应检查。用户愿意为完成验证而
等几秒钟。通常带有侵略性的TCP中继 (基于平均往返时间)是不需要的,TC确认P开销也
是不需要的。
    在另一种极端情况下,用户不愿花几分钟等待验证。因此两分钟后,可靠的TCP数
据递送也是无效的。对备用服务器快速的使用能在用户放弃之前获得访问。
  3. 协议的无状态特性简化了UDP的使用
    服务器和客户机不停变化。系统重新启动,或单路供电。通常情况下,这不会产生问题,
但会导致出现超时和TCP连接中断检测,通过编写编码能够处理这类异常事件。无论如何
UDP完全消除了这类特殊处理以及其中的任何一部分。每一个服务器和客户端只需一次打开
他们UDP 传输,尔后可以使传输处于一种打开的状态,也许在网络上从始至终传输的是不
成功信息。
4. UDP简化了服务器的实现
    在最早的RADIUS实现中,服务器是单线程的。这意味着只能有一个请求被接收、处理
和返回。随后发现在后台安全机制会占用实时时间(1秒或更多)的环境中这样做是难管理
的。服务器的请求队列会被填满,在每分钟内有成百上千的用户正在等待验证的环境中,请
求的轮换时间会长于用户所能忍受的等待时间,(尤其严重的是在数据库中的一次特殊的查
找,或者花在DNS上的时间大于30秒的情况)。显而易见的解决方法是多线程。用UDP解决
这一问题是很简单的。每一个请求得到一个单独的进程,通过一个简单的UDP数据包进行与
客户端原始通信,从而达到与客户端NAS直接响应的目的。
UDP并不是一副万能药。应当注意的是使用UDP需要一种内嵌于TCP的功能:使用UDP,
我们必须通过人工成功管理联系同一台服务器中继计时器,但我们并不需要花费同样的我们必须通过人工成功管理联系同一台服务器中继计时器,但我们并不需要花费同样的注意力给TCP提供的计时器。这是在这个协议中以很小的代价换来UDP诸多优点的惩罚.
    没有TCP我们仍然可能使用着金属线连接的锡罐通信。但是对于这个特殊的协议,UDP
是一个更好的选择。

2.5 中继提示	 
如果RADIUS服务器和副RADIUS服务器拥有共享密钥,在向备用服务器转发数据包时用相同的ID和请求鉴别码是可行的,因为属性内容没有发生变化。用一个新的请求鉴别码向备用服务器传输也是可以的。
如果你改变了用户密码属性的内容(或者其他属性),你需要一个新的请求鉴别码,因此还需要一个新的ID。
如果NAS向一个与前一个服务器完全相同的服务器传输RADIUS请求,而且属性内容没有发生变化,你必须使用相同请求鉴别码、ID、和源端口号。若出现属性被修改,你必须使用新的请求鉴别码和ID。
NAS可以在所有的服务器中使用同一个ID,或者对每一个服务器使用单独的ID,这是根据使用者的要求决定。如果由于额外的请求,一个NAS需要多于256个ID,它可以使用额外的源端口号传输这些请求,并对每一个源端口ID进行跟踪。这样做,某一时刻对某一个服务器的额外请求,上限大约是16,000,000。
2.6 保持激活状态应该考虑的损害
一些应用者已经采取传输测试的RADIUS请求给服务器的方法,看服务器是否处于激活状态。这种方法是不可取得,因为它会增加额外的负荷,而且因为没有提供任何附加有用信息,所以损害可测量性。因为一个RADIUS请求是包含在一个单独的数据包中,在你送出ping 的这段时间里,你或许可以传输一个RADIUS请求,得到一个RADIUS响应得知RADIUS服务器处于激活状态。如果你没有要传输的RADIUS请求,就不必关心服务器是否处于激活状态,因为你没有使用到它。
如果你想监视你的RADIUS服务器,可以使用简单网络管理协议(SNMP),这是SNMP的指责所在。
3. 包的格式
     一个完整的RADIUS数据包是被封装在UDP的数据域中[4],在那UDP目标端口域指定为1812 (十进制数)。
在应答数据包生成时,源端口号和目的端口号进行颠倒。
本备忘录是为RADIUS协议作评注的。RADIUS早期的配置中是使用的UDP的1645端口号,它是与数据矩阵服务(datametrics)冲突。标准RADIUS端口号是1812。
以下是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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     编码      |  标识符       |            长度               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                        鉴别码                                 |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    属性 ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
编码
编码域是一位字节,确定RADIUS数据包的类型。在接收到一个无效编码域的地数据包后,该数据包只是会被简单的丢弃。
RADIUS指定了如下编码:
    1       接入请求(Access-Request)
    2       接入允许(Access-Accept)
    3       接入拒绝(Access-Reject)
    4       记账请求(Accounting-Request)
    5       记账回应(Accounting-Response)
    11       接入询问(Access-Challenge)
    12       服务器状态(Status-Server (experimental))
    13       客户机状态(Status-Client (experimental))
    255      保留(Reserved)
    编码4和编码5在RADIUS记账文档[5]中描述。编码12和编码13为有可能出现的应用保留,在本文中不做过多的说明。
标识符
标识符域是一个字节,用于比较请求与回复。如果在一个很短的时间片段里,一个请求有相同的客户源IP地址、源UDP端口号和标识符,RADIUS服务器会认为这是上一个重复的请求。
长度
长度域是两个字节。它指明了包括编码、标识符、长度、鉴别码和属性域在内的数据包的长度。在数据包长度以外的字节位必须以填充数对待,在接收时忽略它。如果包的长度比指定的短,则此包会被直接丢弃。最小的长度是20,最大的长度是4096。
鉴别码
    鉴别码域是十六个字节。最重要的字节是被第一个传输的。这个值是被用于验证来自RADIUS服务器的回复,和密码隐藏算法。
请求鉴别码
在接入请求数据包中,鉴别码值是一个十六个字节的随机二进制数,被称为请求鉴别码。在机密的整个生存周期中(如RADIUAS服务器和客户端共享的机密),这个值应该是不可预测的,并且是唯一的,因为具有相同密码的重复请求值,使黑客有机会用已截取的响应回复用户。因为同一机密可以被用在不同地理区域中的服务器的验证中,所以请求认证域应该具有全球和临时唯一性。
接入是请求数据包中的请求鉴别码值应该也是不可预测的,以免黑客蒙骗服务器,对一个可预测的将来的请求进行响应,然后以此响应为基础,对未来的接入请求伪装成那台服务器。
虽然如像RADIUS这样的协议是没有能力防卫通过实时活动监听攻击和窃取认证过的对话内容,但是唯一的不可预测的请求的存在很大范围内预防了对认证系统的攻击。
NAS和RADIUS共享机密。请求认证执行的共享机密是用单向MD5哈氏算法产生一个十六位的摘要值,此值同用户输入的密码进行异或,异或值放置在接入请求数据包中的用户密码属性域中。在属性单元中可以了解到更为详细关于用户密码的信息。
响应鉴别码
接入请求、接入拒绝和接入盘问数据包中鉴别码值叫做响应鉴别码,它包含了在一串字节流上的计算出的单向MD5散列,这些二进制数是由RADIUS数据包组成,以编码域开始,包括标识符,长度,来自接入请求数据包的请求鉴别码,和执行共享机密的响应属性。即
ResponseAuth =MD5 (Code+ID+Length+RequestAuth+Attributes+Secret) 
其中 "+"表示连接。
管理标记
     机密(在客户端和RADIUS服务器端共享的密码)应该至少和一个精选的密码一样宽大和不可预测。密码长度至少应该在十六字节以上。宽大密码范围能有效提供对穷举搜寻攻击的防卫。机密禁止为空(长度为零),因为这会简化数据包的伪造。
     RADIUS服务器必须使用RADIUS用户UDP数据包中的源IP地址来决定应该使用那一个共享机密,因此RADIUS请求是可以被代理的。
     在使用转发代理时,当代理转发一个请求时,代理必须根据要转发的方向来更改每个数据包,代理可以添加一个代理状态属性(Proxy-State Attribute),而当代理转发一个响应时,如果它已经添加了一个代理状态属性,则必须把这个属性去除掉。代理状态属性总是在其他代理状态属性之后添加或去除,除此之外不存在任何关于属性在属性列表中位置设定。因为接入允许和接入拒绝数据包是对完整数据包的内容进行认证,所以代理状态属性的拆除会使包上的签字无效,所以代理不得不对数据包重新签发。
    更多关于RADIUS代理应用的信息是在这篇文档讨论的范围之外的。
4.数据包的类型
RADIUS数据包的类型是由数据包编码域中的第一个字节中的编码域决定的。
4.1 接入请求
描述
接入请求是被用来传送给RADIUS服务器的,传送的信息被用来决定一个用户是否被允许接入一个特定的NAS和是否提供用户要求的特定服务器。一个希望对一个用户进行认证的操作必须传送一个编码域值为1的数据包。
    一旦收到来自有效客户端的请求,服务器端就必须回复一个适当的数据包。
    接入请求应当包含用户名属性,必须包含或者是一个NAS的IP地址属性,或者是一个NAS标识符属性(或者是两者)。
    接入请求必须包含或者是用户密码,或者是CHAP密码,或者是一个状态值。接入请求禁止同时包含用户密码和CHAP密码。如果将来的扩展要求传送其他种类的验证信息,可用这些扩展的属性替代接入请求中的用户密码或CHAP密码。
    接入请求应该包含一个NAS端口号属性或者是NAS端口类型属性或者是两者同时包含,除非被要求的接入类型不涉及端口,或者是NAS不在它的端口中不区分。
    接入请求可以包含附加属性作为服务器的提示信息,但服务器不一定采纳提示信息。
    在一个用户密码出现时,使用一种基于RSA实验室的(Message Digest Algorithm MD5 [3]的方法对它进行隐藏。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -