首先为什么要有HTTPS呢,就是HTTP是明文传输的,会导致有几个问题,第一是窃取,就是在通信链路上可以获取通信内容,这样你的账号密码可以被窃取,第二是可能会被篡改,就是在你的通信链路上植入垃圾广告,第三个是可能会被冒充,比如冒充淘宝网站。而HTTPS在HTTP和TCP层之间加入了TLS协议来解决刚才提到的危险。首先,HTTPS的交互信息是加密的,第三方无法窃取,其次有个校验机制,如果在传输过程中有被篡改过,那么会有警告提示,最后呢,会身份证书的证明,来证明这个淘宝是不是真的淘宝网。
    而HTTPS能有这些,就需要进行TLS的握手协议,采用不同的秘钥交换方式,它们的握手协议也不太一样,我就说我了解的RSA协议。其中握手的话,有四次,首先,客户端是发送一个请求给服务端,请求里面有一个随机数,还有它所支持的TLS的版本啊之类的,服务端收到请求后,也会发一个随机数给客户端,还有所使用的密码套件,还有服务端的身份证书,里面包含了服务端的公钥,接下来的话,客户端就需要验证这个身份证书是否真实了,

    这个身份证书是为了验证这个公钥是不是服务端产生的,身份证书是由CA机构来签名的,首先CA会把服务端的公钥,证书有效时间等打包成一个包,然后对这个包进行hash计算,然后再用CA自己的私钥进行加密,相当于做了签名,客户端的话会使用相同的hash函数来计算这个包,也得到一个hash值,又因为一般浏览器和操作系统自带有CA的公钥,所以用这个公钥去解密那个签名,就可以得到CA计算的hash值,再将两个hash值比较一下,如果相同的话,就证明证书是可信的。

    客户端验证身份的可信度之后,客户端会再生成一个随机数,再用服务端的公钥加密后,传给服务端(第三次握手),服务器在再用自己的私钥解密,这样的话,双方就都有3个随机数了,生成会话秘钥,它是对称加密的。双方再把之前发送的数据做一个摘要,再用这个秘钥加密测试一下是否被篡改和能否正常解密加密,之后HTTP就使用对称加密来进行请求和响应了。嗯。。大概就是这样。