能够看到 HTTPS的网站,在浏览器的地址栏内会出现一个带锁的标记。html
HTTPS并不是是应用层一个新的协议,一般 HTTP 直接和 TCP 通讯,HTTPS则先和安全层(SSL/TLS)通讯,而后安全层再和 TCP 层通讯。git
SSL/TLS协议就是为了解决上面提到的HTTP存在的问题而生的,下面咱们来看一下它是怎么解决的:浏览器
加密和解密同用一个秘钥的方式称为 共享秘钥加密,也被叫作对称秘钥加密。安全
client_random
和一系列加密方法server_random
和加密方法现有浏览器和服务器有了三个相同的凭证:client_random
、server_random
和加密方法 用加密方法把 client_random
、server_random
两个随机数混合起来,生成秘钥,这个密钥就是浏览器和服务端通讯的暗号。服务器
存在的问题:第三方能够在中间获取到client_random
、server_random
和加密方法,因为这个加密方法同时能够解密,因此中间人能够成功对暗号进行解密,拿到数据,很容易就将这种加密方式识破了。dom
以后浏览器经过公钥将数据加密传输给服务端,服务端收到数据使用私钥进行解密。服务端给浏览器发送数据,则使用私钥进行加密,浏览器收到服务端发送过来的数据,使用公钥进行解密。post
存在的问题:网站
传输数据阶段依然使用对称加密,可是对称加密的秘钥咱们采用非对称加密传输。加密
到此为止,服务器和浏览器就有了相同的 client_random
、server_random
和 pre_master
, 而后服务器和浏览器会使用这三组随机数生成对称秘钥。有了对称秘钥以后,双方就可使用对称加密的方式来传输数据了。code
使用对称和非对称混合的方式,实现了数据的加密传输。可是这种仍然存在一个问题,服务器多是被黑客冒充的。这样,浏览器访问的就是黑客的服务器,黑客能够在本身的服务器上实现公钥和私钥,而对浏览器来讲,它并不彻底知道如今访问的是这个是黑客的站点。
服务器须要证实本身的身份,须要使用权威机构颁发的证书,这个权威机构就是 CA(Certificate Authority), 颁发的证书就称为数字证书 (Digital Certificate)。
对于浏览器来讲,数字证书有两个做用:
下面咱们来看一下含有数字证书的HTTPS的请求流程
相对于不含数字证书的HTTPS请求流程,主要如下两点改动