HTTPS

什么是HTTPS

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL/TLS,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持,可确保数据在网络上之传输过程中不会被截取。

TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

HTTPS的作用

内容加密
建立一个信息安全通道,来保证数据传输的安全;
身份认证
确认网站的真实性
数据完整性
防止内容被第三方冒充或者篡改

HTTPS的缺点

对数据进行加解密决定了它比http慢

需要进行非对称的加解密,且需要三次握手。首次连接比较慢点,当然现在也有很多的优化。

HTTPS和HTTP的区别

HTTPS协议是需要CA申请书。

HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密的传输协议

HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

加密算法

1、对称加密
有流式、分组两种,加密和解密都是使用的同一个密钥。
问题:

  • 不同的客户端、服务器数量庞大,所以双方都需要维护大量的密钥,维护成本很高
  • 因每个客户端、服务器的安全级别不同,密钥极易泄露

2、非对称加密
加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
3、哈希算法
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
4、数字签名
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

HTTP演化为HTTPS的过程

1、使用对称加密(需要大量密钥,维护成本高)
2、使用非对称加密(公钥有可能被截获)
3、使用两者结合,公钥加密内容,内容为对称加密算法(公钥如何获取,如何确认服务器是真的,万一传给黑客呢)
4、提供一个下载地址(但是有可能是假的),服务器发给客户端一个公钥(万一服务器是黑客呢)
5、SSL证书


SSL握手过程

客户端首次发出请求

  • 支持协议的版本,比如SSL3.0
  • 一个随机数(第一个)
  • 支持的加密方法(RSA)

服务端首次回应

服务端在接收到客户端的Client Hello之后,服务端需要确定加密协议的版本,以及加密的算法,然后也生成一个随机数,以及将自己的证书发送给客户端一并发送给客户端,这里的随机数是整个过程的第二个随机数。

  • 确定协议的版本
  • 加密的算法
  • 一个随机数(第二个)
  • 服务器证书

客户端再次回应

客户端首先会对服务器下发的证书进行验证,验证通过之后,则会继续下面的操作,客户端再次产生一个随机数(第三个随机数),然后使用服务器证书中的公钥进行加密,以及放一个ChangeCipherSpec消息即编码改变的消息,还有整个前面所有消息的hash值,进行服务器验证,然后用新秘钥加密一段数据一并发送到服务器,确保正式通信前无误。
客户端使用前面的两个随机数以及刚刚新生成的新随机数,使用与服务器确定的加密算法,生成一个Session Secret。

  • 验证证书
  • 一个随机数(第三个)
  • 公钥加密

服务器再次响应

服务端在接收到客户端传过来的第三个随机数的 加密数据之后,使用私钥对这段加密数据进行解密,并对数据进行验证,也会使用跟客户端同样的方式生成秘钥,一切准备好之后,也会给客户端发送一个 ChangeCipherSpec,告知客户端已经切换到协商过的加密套件状态,准备使用加密套件和 Session Secret加密数据了。之后,服务端也会使用 Session Secret 加密一段 Finish 消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。

后续客户端与服务器间通信

确定秘钥之后,服务器与客户端之间就会通过商定的秘钥加密消息了,进行通讯了。整个握手过程也就基本完成了。


https实际就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书,等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。

推荐阅读更多精彩内容