一.工作流程图
二.流程描述
1.浏览器将自己支持的对称加密算法种类,hash算法种类发送给服务端
2. 服务器从中选出一套双方都支持的加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的颁发机构)
3.验证证书的合法性
3.1从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥进行下一步
3.2用机构的证书公钥解密得到证书的内容和证书签名,浏览器根据服务器返回的证书信息计算签名,比对是否一致
4.浏览器端生成一个供双方加解密信息的随机数用于交换数据时的加密(交换的数据采用对称加密,大家都采用相同的密钥)
5.浏览器告诉服务器,以后我们传输的数据都用这个随机数做密钥(协商出的密钥使用非对称加密)
5.1在把随机数传给服务器前,需要使用服务器的公钥加密随机数,确保只有服务器能解密信息
5.2 为了确保浏览器向服务器传输的数据不被簒改(服务端的公钥是透明的,谁都可以持有),浏览器用第2步中约定好的hash算法对上一步中的加密信息进行签名,然后再使用随机数(未加密的)对签名进行加密
6.把加密后的随机字符串(假设叫a1)和加密过的签名(b1)传给服务器
7.服务器使用私钥解密a1得到明文a,得到随机字符串;得到随机字符串后,解密b1得到b,b是一个hash散列,对a进行hash运算得到c,然后判断b是否等于c来判断传输的消息是否被蹿改
8.服务器使用随机数来加密网页内容,浏览器使用同样的随机数来解密内容
三.为什么要这么设计