CHAP 验证使用质询和响应的概念,这表示呼叫者(验证者)会质询呼叫者(被验证者)以证明其身份。质询包括一个随机数和一个由验证者生成的唯一 ID。呼叫者必须使用 ID、随机数及其 CHAP 安全凭证来生成要发送到对等点的正确响应(握手)。
CHAP 安全凭证包括 CHAP 用户名和 CHAP“机密”。聊天机密是呼叫者和对等点在进行 PPP 链路协商之前可识别的任意字符串。可在 CHAP 数据库 /etc/ppp/chap-secrets 中配置 CHAP 安全凭证。
CHAP 数据库在 /etc/ppp/chap-secrets 文件中实现。要成功进行验证,PPP 链路两端的计算机必须在其 /etc/ppp/chap-secrets 文件中包含另一方的 CHAP 凭证。
与 PAP 不同,共享机密必须以明文形式保存在两个对等点中。不可以将 crypt、PAM 或 PPP 登录选项与 CHAP 一起使用。
/etc/ppp/chap-secrets 文件具有以下语法。
myclient myserver secret5748 * |
这些参数具有以下含义:
呼叫者的 CHAP 用户名。此名称可以与呼叫者的 UNIX 用户名相同,也可以不同。
远程计算机(通常为拨入服务器)的名称。
呼叫者的 CHAP 机密。
与 PAP 口令不同,CHAP 机密不通过链路发送。相反,CHAP 机密在本地计算机计算响应时使用。
与呼叫者关联的 IP 地址。使用星号 (*) 表示任何 IP 地址。
CHAP 验证按以下顺序发生。
将要启动通信的两个对等点就用于在 PPP 链路协商期间验证的机密达成一致。
两台计算机的管理员将机密、CHAP 用户名和其他 CHAP 凭证添加到各自计算机的 /etc/ppp/chap-secrets 数据库中。
呼叫者(被验证者)呼叫远程对等点(验证者)。
验证者生成随机数和 ID,并将这些数据作为质询发送到被验证者。
被验证者在其 /etc/ppp/chap-secrets 数据库中查找对等点的名称和机密。
被验证者通过将 MD5 计算算法应用于机密和对等点的随机数质询来计算响应。然后,被验证者将结果作为响应发送到验证者。
验证者在其 /etc/ppp/chap-secrets 数据库中查找被验证者的名称和机密。
验证者通过将 MD5 应用于作为 /etc/ppp/chap-secrets 中被验证者的质询和机密生成的数字,来计算其自己的数字。
验证者将其结果与呼叫者的响应进行比较。如果两个数字相同,则对等点已成功对呼叫者进行验证,链路协商将继续。否则,将丢弃该链路。