Q/DKBAXXXX-2001 密级:机密
Ver Type Pap/Chap Rsv SerialNo ReqID UserIP UserPort ErrCode AttrNum Authenticator 2 ACK_INFO 无意义,填0 无意义,填0 与相应询问消息的SerialNo一致 无意义,填0 被询问的用户IP 无意义,填0 见上文的对ErrCode的定义 根据实际情况填写 根据Response Authenticator的计算方法进行计算的结果 这个消息可以带属性UpLinkFlux, DownLinkFlux, 和Port中的一个或多个,取决于相应的REQ_INFO消息带了哪些询问属性。如果某属性取不到,则不返回该属性。所以一个属性在本消息中存在的必要条件是: i. 询问消息中存在 ii. 能被取得
5.5 下线通知流程(BAS通知Portal Server)
对于从Portal Server向BAS请求用户下线的流程此处不进行描述。用于Server首先检测到用户已经下线;或者BAS主动切断连接时,用来通知Portal Server(参见图5-13):
Client(e.g. Portal Server)Server(e.g. BAS)NTF_LOGOUT
图5-13 下线通知流程
通知消息固定向UDP端口50100发送。 NTF_LOGOUT的定义如下:
Ver Type Pap/Chap Rsv SerialNo 2 NTF_LOGOUT 无意义,填0 无意义,填0 无意义,填0 2005-3-10, 10:32:13
21
Q/DKBAXXXX-2001 密级:机密
ReqID UserIP UserPort ErrCode AttrNum Authenticator 无意义,填0 被下线的用户IP 无意义,填0 见上文的对ErrCode的定义 根据实际情况填写 根据Request Authenticator的计算方法进行计算的结果 无,或者Server设备需要通过文字信息描述下线原因,可以带一个或多个TextInfo属性
6 其他说明
6.1 关于TextInfo属性的使用
TextInfo用于传递文字信息。建议使用如下惯用法:
????
正常情况下,任何消息都不带该属性。
如果Server通过第三方设备实现鉴权,例如Radius Server,而该设备又包含文字信
息,应使用该信息作为文字信息。
????
BAS本身产生的错误信息不传送到Portal server。 建议BAS能通过调试命令关闭/打开消息透传的功能。
6.2 协议的兼容性
显然,引入了报文验证字之后,版本Version 2与Version 1完全不兼容。如果严格按照扩充后的协议,旧版本的下线流程和查询流程报文将因为没有携带Authenticator字段而被认为是非法的报文。为了实现与旧版本的兼容,建议在实现新协议的软件中增加版本切换的控制开关:如果对端使用旧版本协议,则通过兼容开关确保能与之对接。
6.3 协议的不完善之处
尽管对每个报文都增加了校验,但是依然可能被BAS和Portal Server之外的第三者利用。本文不对此进行详细的描述。
6.4 协议其他说明
1、此协议规定承载报文的是UDP协议,也即报文为UDP报文,BAS设备在固定端口2000上等待接收PortalServer发来的各种请求报文和确认报文;
2、 在PortalServer端目前不采用超时重传和出错重传,对于PortalServer发出的各种请求报文,若在一定的时间内没有收到BAS设备发来的响应报文或着收到的响应报文出错,对于超时没有响应则PortalServer向BAS设备发送一个表示等待响应超时的报文,同时PortalServer认为相应的请求失败,直接告诉用户失败;
2005-3-10, 10:32:13
22
Q/DKBAXXXX-2001 密级:机密
3、Chap认证的相关说明:
(1)、challenge的生成:challenge由BAS设备在收到请求Challenge报文的时候随机生成,长度为16个字节,跟随Challenge应答报文下发到Portal Server。
(2)、Chap_Password的生成:Chap_Password的生成遵循标准的Radious协议中的Chap_Password 生成方法(参见RFC2865)。密码加密使用MD5算法,MD5函数的输入为
ChapID + Password +Challenge
其中,ChapID取ReqID的低 8 位,Password的长度不够协议规定的最大长度,其后不需要补零。 4、无论采用Chap认证还是Pap认证,都允许用户口令为空;
5、当用户向PortalServer提交的连接请求里用户名为空时,PortalServer在向BAS设备发送认证请求时应用一个缺省的用户名代替(比如***);
6、认证流程中各种报文所带属性的个数(建议): (1)、请求Challenge 报文:0个属性;
(2)、对请求Challenge响应的报文:若请求Challenge成功则为1个属性—Challenge属性,若请求Challenge失败则属性个数为0个;
(3)、请求认证报文:2个属性,分别为用户名、PassWord 或ChapPassWord ; (4)、对请求认证的响应报文:0个属性; (5)、请求下线报文或表示超时的报文:0个属性; (6)、对请求下线的响应报文:0个属性;
(7)、PortalServer对收到从BAS设备发来的认证成功报文的确认:0个属性; 7、报文的长度限制是最小32字节,最大1024(1K)字节;
7 附录
7.1 成功的Chap认证报文示例
示例中使用的用户名为:web@default0 密码为:123456 服务器的密钥secret:1234567890123456
1) PORTAL Server -> BRAS的Challenge请求报文(REQ_CHALLENGE)
ver : 2 type : challenge req Method : chap SerialNo: 4 ReqID : 0 UserIP : 172.75.100.253 ErrCode : 0
2005-3-10, 10:32:13
23
Q/DKBAXXXX-2001 密级:机密
AttrNum : 0
报文的二进制形式:
02 01 00 00 00 04 00 00 ac 4b 64 fd 00 00 00 00 e8 0d a1 b2 79 f3 b5 f2 e8 cb c2 dd 32 4f 56 dd
? 验证字Authenticator的计算方法:
以字节流Ver + Type + PAP/CHAP + Rsvd + SerialNo + ReqID + UserIP + UserPort
+ ErrCode + AttrNum + 16个字节的0 + request attributes + secret作为MD5的输入,得到的MD5输出就是请求报文的验证字Authenticator的内容。
这里就是以
02 01 00 00 00 04 00 00 ac 4b 64 fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 为md5输入,输出的就是验证字Authenticator的内容:
e8 0d a1 b2 79 f3 b5 f2 e8 cb c2 dd 32 4f 56 dd
2) BRAS -> Portal Server的Challenge请求响应报文(ACK_CHALLENGE):
ver : 2 type : challenge ack Method : chap SerialNo: 4 ReqID : 2 UserIP : 172.75.100.253 ErrCode : 0 AttrNum : 1
报文的二进制形式: 02 02 00 00 00 04 00 02 ac 4b 64 fd 00 00 00 01 4e 1f f4 eb 21 57 50 bc 1d 4a a4 e4 8b 25 76 11 03 12 bb 0b cd 57 41 5d 3d b7 b7 cd 5b 39 3f c1 29 e3
其中Challenge为: bb 0b cd 57 41 5d 3d b7 b7 cd 5b 39 3f c1
2005-3-10, 10:32:13
24
Q/DKBAXXXX-2001 密级:机密
29 e3
3) Portal Server -> BRAS 认证请求报文(REQ_AUTH):
ver : 2 type : auth req Method : chap SerialNo: 4 ReqID : 2 UserIP : 172.75.100.253 ErrCode : 0 AttrNum : 2 报文的二进制形式:
02 03 00 00 00 04 00 02 ac 4b 64 fd 00 00 00 02 30 7b ba a5 26 5d f5 28 e7 33 94 97 2c 15 1b 69 04 12 73 cc 87 6a 01 ca 9a b3 98 d7 fc c8 58 36 b5 8b 01 0e 77 65 62 40 64 65 66 61 75 6c 74 30
? Chap_Password的生成方法:
Chap_Password的生成遵循标准的Radious协议中的Chap_Password 生成方法(参见
RFC2865)。
密码加密使用MD5算法,MD5函数的输入为
ChapID + Password +Challenge
其中,ChapID取ReqID的低 8 位,Password的长度不够协议规定的最大长度,其后不需要
补零。
这里ReqID的低 8 位是:02, Password为:31 32 33 34 35 36
Challenge为:bb 0b cd 57 41 5d 3d b7 b7 cd 5b 39 3f c1 29 e3 合并后就是以
02 31 32 33 34 35 36 bb 0b cd 57 41 5d 3d b7 b7 cd 5b 39 3f c1 29 e3 为md5输入,输出的就是Chap_Password:
73 cc 87 6a 01 ca 9a b3 98 d7 fc c8 58 36 b5 8b
4) BRAS -> Portal Server 认证成功报文(ACK_AUTH):
2005-3-10, 10:32:13
25