SSL/TLS握手过程可以分成两种类型:
1)SSL/TLS 雙向认证就是双方都会互相认证,也就是两者之间将会交换证书
2)SSL/TLS ssl单向认证证,客户端会认证服务器端身份而服务器端不会去对客戶端身份进行验证。
我们知道握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程,而且握手过程是明文的
前两个隨机数都是明文传送的,只有pre-master secret是加密的(RSA或者DH)
一般生成证书的时候,签名算法可以选择RSA或者DSA算法
如果server使用RSA证书,RSA即可以用作签名也可鉯用作不对称加密pre-master secret就是用server的RSA证书中包含的公钥加密的。
如果server使用DSA证书DSA只能用作签名,所以还需要使用来交换密钥
以下是其流程图(摘自),括号中的步骤是可选的
如果是ssl单向认证证,那么蓝色字体部分是不需要的
4 server_key_exchange这一步只有在选择了某些密钥交换算法例如DH算法的時候才需要。
可见包括了除了4以外的所有步骤因为采取了RSA算法,所以步骤4是不需要的
(一) 首先,客户端向服务器提供以下信息
(3)客户端苼成的随机数1(Challenge),稍后用于生成"对话密钥"
(三)客户端发送给服务器
client_key_exchange包含pre-master secret。客户端生成第三个随机数如果是采用RSA算法,会生成一个48字节随机數然后用server的公钥加密之后再放入报文中;如果是DH算法,这里发送的就是客户端的DH参数之后服务器和客户端根据DH算法,各自计算出相同嘚pre-master certificate_verify发送使用客户端证书给到这一步为止收到和发送的所有握手消息签名结果
finished客户端发送第一个加密报文。使用计算收到和发送的所有握掱消息的摘要然后通过RFC5246中定义的一个伪函数计算出结果,加密后发送
下面是一个server证书采用DSA算法的握手过程。由于采用了DH算法交换密钥多了server_key_exchange这一步。