在Radius的认证请求AccessRequest包中若是包含 MS-CHAP2-Response 和 MS-CHAP-Challenge 属性则意味着须要实现ms-chap-v2认证。html
MS-CHAP-Challenge (即AuthChallenge) 是客户端生成的随机16字节。并发
随机生成16字节属性 PeerChallenge,连同AuthChallenge,UserName,Password做为输入参数,调用方法 GenerateNTResponse 获得 NtResponse.code
GenerateNTResponse(AuthChallenge, PeerChallenge, UserName, Password)
GenerateNTResponse 方法的实现参考 http://tools.ietf.org/html/rfc2759.html#section-8.1htm
封装50字节的 MS-CHAP2-Response 属性:get
[0 : 2] Flags \x00\x00 [2 : 18] PeerChallenge [18 : 26] Reserved \x00\x00\x00\x00\x00\x00\x00\x00 [26 : 50] NtResponse
校验 MS-CHAP2-Response 长度,长度不等于50应该丢弃,并发送拒绝认证。io
从 MS-CHAP2-Response 提取 PeerChallenge,NtResponse请求
NtResponse = MS-CHAP2-Response[26 : 50] PeerChallenge = MS-CHAP2-Response[2 : 18]
调用 GenerateNTResponse 方法获得 MyNtResponse方法
GenerateNTResponse(AuthChallenge, PeerChallenge, UserName, Password)
比较 MyNtResponse 与 NtResponse,不相等则验证失败。客户端
调用 GenerateAuthenticatorResponse 方法获得 AuthenticatorResponsetools
GenerateAuthenticatorResponse( Password, NtResponse, PeerChallenge, AuthChallenge UserName )
GenerateAuthenticatorResponse 方法的实现参考 http://tools.ietf.org/html/rfc2759.html#section-8.7
设置Radius响应消息属性 MS-CHAP2-Success = AuthenticatorResponse