HTTPS安全
在我们的认知中,
HTTP
是超文本传输,是一个有问有答形式的短链接,但是不安全,HTTPS
是安全的,使用了SSL
或TLS
加密,那么什么是SSL
?什么是TLS
?
HTTP
采用的是明文传输,在HTTP
报文传输过程中,很容易被窃听,如图所示
因此我们需要采用加密的方式防止被窃听,现在流行的是和SSL
、TLS
进行组合的方式,对通信加密,如图所示
即在建立起安全的通信线路后,遍可以安全通信,这其实就是 HTTPS
,HTTPS
并不是应用层的又一个协议,通常HTTP
是和 TCP
直接通信,当使用SSL
时,则演变成先和SSL
通信,再由SSL
和TCP
通信了,
什么是 SSL 和 TLS?
SSL
是介于HTTPS
下和TCP
上的一个协议加密层(安全套接字加密层),在后续的发展中SSL
更新到3.0
以后,IETF
对SSL3.0
进行了标准化,并更名为TLS
。
基于SSL
和TLS
通信设计两种加密,以下是两种加密的具体说明。
密钥加密技术
1、对称加密
所谓对称加密说白了就是用同一个密钥对数据进行加密和解密,对称加密的密钥由客户端生成。
客户端在发送数据到服务端之前,用共享密钥
对数据进行加密,服务端接收到的是加密后的数据,需要用共享密钥
解密成正常数据,传输速率上和HTTP
差不多。我们常用的AES、DES算法就是对称加密。
使用对称加密会出现一个问题,共享密钥
需要在每次发送数据时传输给对方,我们没办法保证安全的传输过去,如果共享密钥
被窃听者拿到,那基本等于明文传输,这时就出现了非对称加密 ,但传输速率只有普通HTTP
的十分之一。
2、非对称加密
公开密钥加密使用一对非对称的密钥。一把叫做
私钥 (private key)
,另一把叫做公钥(public key)
。公钥加密数据发送给对方,对方再用私钥解密。
非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下: 明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文 被私钥加密过的密文只能被公钥解密,过程如下: 明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
3、混合加密
混合加密即结合了对称加密和非对称加密,结合了他们各自的优点。
HTTPS
采用混合加密机制(建立通信前,用公开密钥
加密的方式传递共享密钥
加密需要用到的密钥,建立通信后,采用共享密钥进行通信),如图
CA机构认证原理
我们在调试HTTPS
接口时,通常听到CA证书这样一个名词,它是CA机构颁发的证书,像上面所说的,为了让我们自己的公钥不暴露在外面,我们需要
- 将我们的公钥、组织信息、个人信息等提供给CA机构申请认证
- 认证成功,则CA机构会给我们颁发证书(包含申请者公钥 、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息,同时包含一个签名),首先CA机构自己拥有一套受信的公钥和私钥(现在的手机或电脑的操作系统都会将所有CA机构的公钥内置到操作系统中),CA机构用自己的私钥对证书进行加密,我们配置到服务器上即可。
- 在客户端第一次请求服务器时,将返回CA机构用私钥加密的证书(包含服务器的公钥 + CA 机构的数字签名)
- 系统根证书会用各个CA机构的公钥进行数据解密,并对域名等信息进行匹配。
- 若验证CA的公钥证书有效,客户端即拿到了服务器的公钥,即可正常通信。
因为非对称加密的方式耗时较高,所以HTTPS
采用的是非对称加密和对称加密相结合的方式,即第一次采用非对称加密验证,后续采用对称加密进行通信。
建立 SSL 连接的步骤
上图为建立 SSL 连接的步骤,下面详细说明一下以上步骤:
- 第 1 步:客户端发送 ClientHello 报文到服务端开始最初阶段的握手,内容包含客户端支持的SSL 版本号及加密组件列表(如加密算法、密钥长度等)。
- 第 2 步:服务端收到报文后,发送 ServerHello 报文,内容包含需要使用的 SSL 版本和加密组件列表,这些都是从客户端发送过来的报文中筛选出来的。
- 第 3 步:服务端接着发送从 CA 机构申请下来的证书 Certificate ,证书包含公钥、组织信息等内容。
- 第 4 步:服务端发送 ServerHelloDone 表示最初阶段的握手结束。
- 第 5 步:客户端在收到 Certificate 后用系统预存的根证书对其进行验证,待验证成功后,发送 Client Key Exchange 开始第二阶段握手,报文中包含用公钥加密过的客户端生成的随机字符串 pre master secret ,这就是之后通信需要用的共享密钥。
- 第 6 步:客户端接着发送 Change Cipher Spec,告知服务端,此次报文之后,将使用 pre master secret 字符串加密通信。
- 第 7 步:客户端发送 Finished ,报文用 pre master secret 加密过,第二阶段握手能否成功,就看服务端能否顺利解密。
- 第 8 步:服务端发送 Change Cipher Spec 报文。
- 第 9 步:服务端发送 Finished 报文。
以上就是 HTTPS 在建立 SSL 通信连接的过程,之后就可以使用对称加密的方式进行通信了。
基本上HTTPS 可以总结为HTTPS = HTTP + 加密处理 + 证书认证 + 完整性保护
,那完整性保护是如何保证的?
实际上在上面的流程中,从应用层发送数据时,会附加一种叫 MAC(Message Authentication Code) 的报文摘要,MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。