SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时服务器与客户机交换一系列消息。1)客户机认证服务器;2)允许客户机与服务器选择双方都支持的密码算法;3)可选择的服务器认证客户;4)使用公钥加密技术生成共享密钥;5)建立加密SSL连接。 握手协议报文头包括三个字段:1字节):该字段指明使用的SSL握手协议报文类型。SSL握手协议报文包括10种类型。报文类型见图13.5。3字节):以字节为单位的报文长度。
报文类型 | 参数 |
hello_request client_hello server_hello certificate server_key_exchange certificate_request server_done certificate_verify client_key_exchange finished | 空 版本、随机数、会话ID、密文族、压缩方法 版本、随机数、会话ID、密文族、压缩方法 X.509v3证书链 参数、签名 类型、授权 空 签名 参数、签名 Hash值 |
图13.5 SSL握手协议报文
SSL
注:带*的传输是可选的,或者与站点相关的,并不总是发送的报文。
图13.6 握手协议的过程
(
(
(
(
当客户从服务器端传送的证书中获得相关信息时,需要检查以下内容来完成对服务器的认证:时间是否在证书的合法期限内;签发证书的机关是否客户端信任的;签发证书的公钥是否符合签发者的数字签名;证书中的服务器域名是否符合服务器自己真正的域名。服务器被验证成功后,客户继续进行握手过程。
同样的,服务器从客户传送的证书中获得相关信息认证客户的身份,需要检查:用户的公钥是否符合用户的数字签名;时间是否在证书的合法期限内;签发证书的机关是否服务器信任的;用户的证书是否被列在服务器的
1)建立安全能力。客户机向服务器发送client_hello报文,服务器向客户机回应server_hello报文,建立如下的安全属性:协议版本,会话ID,密文族,压缩方法,同时生成并交换用于防止重放攻击的随机数。密文族参数包括密钥交换方法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另一种实现在Fortezza chip上的密钥交换)、加密算法(DES、RC4、RC2、3DES等)、MAC算法(MD5或SHA-1)、加密类型(流或分组)等内容。2)认证服务器和密钥交换。在hello报文之后,如果服务器需要被认证,服务器将发送其证书。如果需要,服务器还要发送server_key_exchange。然后,服务器可以向客户发送certificate_request请求证书。服务器总是发送server_hello_done报文,指示服务器的hello阶段结束。3)认证客户和密钥交换。客户一旦收到服务器的server_hello_done报文,客户将检查服务器证书的合法性(如果服务器要求),如果服务器向客户请求了证书,客户必须发送客户证书,然后发送client_key_exchange报文,报文的内容依赖于client_hello与server_hello定义的密钥交换的类型。最后,客户可能发送client__verify 报文来校验客户发送的证书,这个报文只能在具有签名作用的客户证书之后发送。4)结束。客户发送change_cipher_spec报文并将挂起的CipherSpec复制到当前的CipherSpec。这个报文使用的是改变密码格式协议。然后,客户在新的算法、对称密钥和MAC秘密之下立即发送finished报文。finished报文验证密钥交换和鉴别过程是成功的。服务器对这两个报文响应,发送自己的change_cipher_spec报文、finished报文。握手结束,客户与服务器可以发送应用层数据了。LDAP里用户的信息中;得到验证的用户是否仍然又权限访问请求的服务器资源。 握手协议的过程如下:
这些消息交换能够实现如下操作:
(
(
(
(
(
SSL
类型(
长度(
内容(≥1字节):使用的报文的有关参数。