咱们知道,HTTP请求都是明文传输的,所谓的明文指的是没有通过加密的信息,若是HTTP请求被拦截,而且里面含有银行卡密码等敏感数据的话,会很是危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS能够将数据加密传输,也就是传输的是密文,即使在传输过程当中拦截到数据也没法破译,这就保证了网络通讯的安全。算法
在正式讲解HTTPS协议以前,咱们首先要知道一些密码学的知识。
DES
、3DES
、TDEA
、Blowfish
、RC5
和IDEA
。其加密过程以下: 浏览器
明文 + 加密算法 + 私钥 => 密文安全
解密过程以下:服务器
密文 + 解密算法 + 私钥 => 明文网络
对称加密中用到的密钥叫作私钥,私钥表示我的私有的密钥,即该密钥不能被泄露。
其加密过程当中的私钥与解密过程当中用到的私钥是同一个密钥,这也是称加密之因此称之为“对称”的缘由。因为对称加密的算法是公开的,因此一旦私钥被泄露,那么密文就很容易被破解,因此对称加密的缺点是密钥安全管理困难。ide
非对称加密:非对称加密也叫作公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通讯双方使用相同的密钥,若是一方的密钥遭泄露,那么整个通讯就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且两者成对出现。私钥被本身保存,不能对外泄露。公钥指的是公共的密钥,任何人均可以得到该密钥。用公钥或私钥中的任何一个进行加密,用另外一个进行解密。大数据
被公钥加密过的密文只能被私钥解密,过程以下:加密
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文code
被私钥加密过的密文只能被公钥解密,过程以下:blog
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
因为加密和解密使用了两个不一样的密钥,这就是非对称加密“非对称”的缘由。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少许数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。
HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程当中,须要用SSL/TLS对数据进行加密和解密,须要用HTTP对加密后的数据进行传输,由此能够看出HTTPS是由HTTP和SSL/TLS一块儿合做完成的。
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通讯提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0
TLS的全称是Transport Layer Security,即安全传输层协议,最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它创建在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差异,主要是它们所支持的加密算法不一样,因此TLS与SSL3.0不能互操做。虽然TLS与SSL3.0在加密算法上不一样,可是在咱们理解HTTPS的过程当中,咱们能够把SSL和TLS看作是同一个协议。
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程须要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来讲,对数据进行对称加密,对称加密所要使用的密钥经过非对称加密传输。
客户端生成的随机密钥,用来进行对称加密
一个HTTPS请求实际上包含了两次HTTP传输,能够细分为8步,以下。
1.客户端向服务器发起HTTPS请求,链接到服务器的443端口
2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥能够发送给任何人。
3.服务器将本身的公钥发送给客户端。
4.客户端收到服务器端的公钥以后,会对公钥进行检查,验证其合法性,若是发现发现公钥有问题,那么HTTPS传输就没法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。若是公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,咱们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。而后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
5.客户端会发起HTTPS中的第二个HTTP请求,将加密以后的客户端密钥发送给服务器。
6.服务器接收到客户端发来的密文以后,会用本身的私钥对其进行非对称解密,解密以后的明文就是客户端密钥,而后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
7.而后服务器将加密后的密文发送给客户端。
8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,获得服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
做者:Leon_hy
连接:https://www.jianshu.com/p/14cd2c9d2cd2来源:简书简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。