一、为什么要使用HTTPS
1.1 HTTP有什么缺点
- 通信使用明文,内容可能会被窃听。
- 不验证通信方的身份,因此有可能遭遇伪装。
- 无法证明报文的完整性,有可能在传输中被篡改。
1.2 为什么会被窃听
由于HTTP本身不具备加密的功能,所以HTTP的报文会使用明文的方式进行发送。然而按照TCP/IP协议族的工作机制,通信的内容在所有的通信线路上都有可能被截取。因为互联网中的所有组成都不是个人的私有物,所以不排除在某个环节会遭到恶意的窥视行为。
1.3 加密处理防止窃听
刚才说过HTTP协议中没有加密机制,但是可以通过和SSL(Secure Socket Layer, 安全套接层)或者TLS(Transport Layer Security, 安全层传输协议)组合使用来加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)。
还有一种是可以通过对内容本身进行加密,客户端和服务端拥有相同的加密和解密的机制就可以,但是使用这种方式,还是存在着被篡改的风险。
1.4 接收到的信息究竟来自谁
由于HTTP协议中,不会对通行方进行确认,也就是说在服务器没有做限制的情况下,可以接收到任何人发送的请求,并且返回一个响应。因此会产生一些问题:无法确定服务器的响应,无法确定客户端的请求,无法确定访问的权限,也有可能因为所有的请求都去接受,无法阻止海量请求下的DoS攻击。
虽然HTTP协议无法确认通信方,但是可以通过SSL实现,之前提到了SSL用于加密处理,这里还可以使用证书的手段,来确认通信方。一般证书由值得信赖的第三方机构颁发,客户端在开始通信之前先确认服务器的证书,确认之后再继续操作,反之服务端通过客户端持有证书即可完成身份的确认。
1.5 接受到的报文真的是对的吗
由于HTTP协议中是无法证明通信的报文的完整性的,所有在传输过程中,即使是内容发生了篡改,也是不知道的。
二、什么是HTTPS
2.1 简要公式
HTTPS = HTTP + 加密 + 认证 + 完整性保护
这也是对应上面提到的HTTP不足展示出的公式,HTTPS也可以说是披着SSL外壳的HTTP,通常HTTP是直接与TCP进行通信的,但是使用HTTPS时,HTTP会先与SSL进行通信,然后由SSL与TCP进行通信。需要注意的是SSL是独立于HTTP协议的。
2.2 关于密钥
首先需要说一下加密方式,通常分为对称加密和非对称加密,对称加密就是双方采用同一把密钥进行加密,双方同时持有密钥进行加密解密,但是这明显存在着问题,只要拿到密钥,任何人都能去破解加密内容,在密钥的传输过程中就可能被截取。所谓非对称加密就要比对称加密安全级别高很多,首先非对称加密有公钥和私钥两种密钥,私钥留给自己,公钥可以随意分发,也就是说别人可以用我的公钥所以去加密,但是只有我才能解密,应为密钥只有自己拥有,也不存在传输,所以相对对称加密来说,更加安全。
2.3 HTTPS是怎么加密的呢
有可能仅仅是有公开密钥(非对称加密)就可以保证安全的交换了,但是HTTPS并不是只使用了公开密钥,而是采用的混合加密机制。就是使用共享密钥和公开密钥的混合加密方式,为什么要混合呢,原因很简单,公开加密要比共享密钥的处理速度要慢。所以将两种方式混合使用才是好的处理方式。
混合使用也就是在第一次通信时,客户端和服务端交换双方的公钥,之后用对方的公钥进行加密传输共享密钥,这时双方都拥有了共享密钥,就可以通过共享密钥进行加密通信传输了。
2.4 公钥是真的吗
上面提到了客户端和服务端交换公钥的操作,但是交换的公钥就真的是真的吗?当然如果没有相应的处理,肯定是不能确定公钥的真实性的。为了解决这个问题,可以使用公开密钥证书。
数字证书的认证流程:首先要去向数字证书认证机构提出公开密钥的申请,认证机构判断好身份以后,会对已申请的公开密钥做数字签名,然后分配这个已经经过签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。服务器将这个证书发送给客户端,客户端接受到后,判断证书是否值得信赖。
三、怎么使用HTTPS
HTTPS虽然相对HTTP来说比较安全,但是它也会带来明显的缺点,也就是所谓的双刃剑,不能一味的使用HTTPS,由于HTTPS要进行SSL的通信及加密解密操作,所以无论是从通信的上还是CPU及内存的消耗来看,势必会造成速度变慢的情况,也就是HTTPS会比HTTP的速度要慢,由此可见,非敏感信息可以不使用HTTPS。