CHAP(挑战握手后验证协议,Challenge Hannd Authentication Protocol),它通过三次握手机制来与远程节点建立一条可信连接。
在iSCSI客户端需要连接网络存储的iSCSI逻辑硬盘时,客户端会想服务端发起iSCSI连接请求,双方通过协商后将采用CHAP进行身份验证,验证报文将使用MD5进行加密后发送。
CHAP验证过程如图1所示。
图1CHAP 验证过程
1、服务端收到客户端的CHAP验证请求后,服务端会向客户端发送一段随机的报文,并加上用户名user1,这个过程称为“挑战”。
如图2所示,Server向Client发送的挑战报文包含:挑战分组类型标识符(01)、标识该挑战分组的序列号(ID)、随机数、挑战方的用户名(这里为user1)。
服务端发送的挑战报文数据将会保留在存储服务器数据库中。
图2CHAP身份验证挑战阶段
2、当Client收到server的挑战报文后,将从中提取出server所发送过来的用户名,然后在后台数据库中去查找用户名为user1的记录,并获取对应的密码,这里为passowrd。然后将用户名、密码、报文ID、和随机报文用MD5加密算法进行加密,并获得密文的哈希值。最后把这个哈希值放到CHAP回应报文中并发送给服务端,回应报文如图3所示。
图3CHAP身份验证回应阶段
3、服务端收到客户端的回应报文后,同样去提取报文中的用户名,然后查找本地的数据库中对应的密码、保留报文ID和随机报文,并用MD5加密算法加密,最终获得该密文的哈希值。服务器将把自己的哈希值和客户端报文的哈希值进行比较,如果相同则表示验证成功,将返回Ack(验证成功),报文如图4所示。
图4 CHAP身份验证成功报文
如果比对失败,表示验证失败,将返回Nak(验证失败),报文如图5所示。