HTTPS安全套接字层超文本传输协议
HTTPS简介
HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS协议的主要作用有两点:第一点是建立一个信息安全通道,来保证数据传输的安全;另一点就是确认网站的真实性。
HTTPS和HTTP的主要区别
- https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
- http和https使用的端口也不一样,前者是80,后者是443。
客户端在使用HTTPS方式与Web服务器通信时的步骤
HTTPS的整体过程分为证书验证和数据传输两阶段。
(1)证书验证阶段
- 浏览器发起 HTTPS 请求。
- 服务端返回 HTTPS 证书,证书中包含服务端的公钥。
- 客户端验证证书是否合法,证书验证阶段采用非对阵加密,如果不合法则提示告警。
(2)数据传输阶段
- 当证书验证合法后,在本地生成随机数。
- 通过公钥加密随机数,并把加密后的随机数传输到服务端。
- 服务端通过私钥对随机数进行解密。
- 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后发送给浏览器。
SSL/TLS协议的加密(握手)过程
SSL/TLS的握手过程如下:
- 客户端给出支持SSL协议版本号,一个客户端随机数N1,客户端支持的加密方法等信息。
- 服务器收到信息后,确认双方使用的加密通信协议,并返回数字证书,一个服务器生成的随机数N2等信息。
- 客户端确认数字证书的有效性,然后生成一个新的随机数N3,然后使用数字证书中的公钥,加密这个随机数,发给服务器。
- 服务器使用自己的私钥,获取客户端发来的随机数N3,并通过约定的对称加密方法,使用前面三个随机数N1、N2、N3生成会话密钥,用来加密接下来的通信内容(对称加密)。
SSL/TSL通过四次握手,主要交换三个信息:
- 数字证书。
- 三个随机数。
- 加密通信协议。
为什么数据传输阶段使用对称加密
-
非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。
-
在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。
HTTPS 的优点
HTTPS 协议是由SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。
HTTPS 的缺点
- HTTPS协议握手阶段比较费时。
- HTTPS连接会增加数据开销。
- CA证书需要一定费用越高。
HTTPS 的优化
证书优化
证书优化主要有两方面:
- 证书传输:证书越小,传输的就越快。选择不同的加密方法,生成的证书的大小也不一样。
- 证书验证:证书验证有的时候不仅需要验证证书是否被篡改,还需要验证证书是否被吊销。之前是由CA机构维护一个吊销证书列表CRL,客户端每次要下载CRL,然后验证证书是否被吊销。随着吊销证书的增多,CRL的大小越来越大。也会导致HTTPS连接变慢。所以引入了OCSP,在线证书状态协议,客户端直接向CA机构发送证书编号,CA机构会返回证书的状态,不需要每次下载CRL,提高了效率。
会话复用
服务器为每个客户端在会话过程中设置一个SessionID,在会话期间将第一次生成的密钥分别保存在客户端和服务器,服务器通过SessionID来保存对应的密钥。当客户端再次连接的时候,直接传入SessionID,然后使用客户端的密钥进行加密。服务器收到后,通过SessionID获取对应的密钥,然后解密。这样客户端就可以复用一个密钥,不用每次都新生成密钥。