STL理解

来源:互联网 发布:java单链表面试实现 编辑:程序博客网 时间:2024/06/05 08:36

1、Client Hello

客户端将自己支持的一套加密算法发给服务器,除此之外,客户端还要产生一个随机数,这个随机数一方面需要在客户端保存,另一方面需要传送给服务端,客户端的随机数需要跟服务端产生的随机数结合起来产生后面要讲到的Master Secret


2.Server Hello

网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密,在握手的整个过程中,都用到了证书中的公钥和浏览器发送给服务器的随机密码以及对称加密算法) 

在服务端向客户端发送的证书中没有提供足够的信息的时候,还可以向客户端发送一个Server Key Exchange


此外,对于非常重要的保密数据,服务端还需要对客户端进行验证,以保证数据传送给了安全的合法的客户端。服务端可以向客户端发出Cerficate Request消息,要求客户端发送证书对客户端的合法性进行验证。

跟客户端一样,服务端也需要产生一个随机数发送给客户端。客户端和服务端都需要使用这两个随机数来产生Master Secret



3、Client KeyExchange

 如果服务端需要对客户端进行验证,在客户端收到服务端的Server Hello消息之后,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。

Client Certificate 验证客户端需要对接收到的服务端的证书进行检查。如果验证成功,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

发送的消息:1、服务器的公钥加随机数(非对称加密),随机数加密握手消息(对称加密)

    2、握手消息的HASH值。(hash值加密)


4.服务器接收浏览器发来的数据之后要做以下的操作:

   a) 使用自己的私钥将信息解密并取出浏览器发送给服务器的随机密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
  b) 使用随机密码加密一段握手消息,发送给浏览器。

 5.客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。


握手的整个过程使用到了数字证书(非对称加密)、对称加密、HASH摘要算法


0 0
原创粉丝点击