https协议是安全的http协议,其本质是对明文传输的http协议内容进行了加密,但是在加密之前,浏览器和服务器之间先要协商出加密的算法和对称加密的密钥,为了保证安全,这个协商过程比较复杂,https协议综合运用了对称加密和非对称加密,总体来说是首先通过非对称加密协商出一个对称加密密钥,以后的数据传输都通过这个密钥进行对称加密。因为非对称加密解密效率低且加密数据有限,所以真正的传输数据不适合用非对称加密
大概步骤总结:
1 客户端通过三次握手跟服务器建立tcp连接
2 客户端向服务器发送请求建立安全连接,告诉服务器自己支持的加密算法
3 服务器选择一种加密算法,把加密算法和自己的ssl证书发送给客户端,证书大概包含如下信息:(1)证书的发布机构CA (2)证书的有效期 (3)公钥 (4)证书所有者 (5)签名
4 客户端验证ssl证书的有效性,大概步骤如下:
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验; (2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发; (3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的; (4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密; (5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比; (6)对比结果一致,则证明服务器发来的证书合法,没有被冒充; (7)此时浏览器就可以读取证书中的公钥,用于后续加密了;
5 客户端得到服务器公钥后,生成一个密钥,用公钥加密后发给服务器,服务器用私钥解密得到密钥,到此客户端和服务器确定了加密算法和密钥,后续的通讯就可以用该密钥加密传输
参考文章:https原理和流程分析