一、HTTPS协议安全是什么?
众所周知,HTTP协议作为互联网应用层协议标准,并未对安全做过多的设计。从密码学理论来分析,一个传输的安全性必须保证三大基本要要素:(1)数据的保密性;(2)数据的完整性;(3)身份校验的安全性。
HTTPS简单理解成HTTP over SSL/TLS。客户端和服务端在使用HTTPS传输业务数据前,首先由SSL/TLS协议在两端之间建立安全信道(这个过程称作握手协商阶段),然后在该安全信道上对HTTP业务报文进行加密传输(这个过程称作加密数据传输阶段)。接下来我们将从HTTP本身存在的安全问题和HTTPS如何解决上述三个问题来详细论述HTTPS协议为什么安全。
图1 HTTPvsHTTPS
二、HTTP通信传输存在的问题
SSL/TLS的安全性体现在哪里,解决了哪些安全问题,如何解决的,下面一步步介绍。
首先,先了解下客户端和服务端之间使用明文HTTP通信存在的安全问题。
图2 HTTP安全问题及HTTP到HTTPS的改造
关于HTTP协议的明文数据传输,攻击者最常用的攻击手法就是网络嗅探,试图从传输过程的数据包中分析出敏感的数据,例如管理员在Web程序后台的登录过程、用户的隐秘信息(手机号码、身份证号码、信用卡号)等重要资料,可能导致严重的安全事故。
HTTP协议在传输客户端请求和服务端响应时,唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度,而对内容是否被篡改不作确认。因此攻击者可以轻易的发动中间人攻击,修改客户端和服务端传输的数据,甚至在传输数据中插入恶意代码,导致客户端被引导至恶意网站被植入木马。
三、SSL/TLS协议的作用
SSL/TLS协议通过数字证书、非对称密钥、对称加密算法、消息验证码算法等技术,实现了通信双方的身份验证、数据传输加密、防篡改等安全保护措施,其主要目标是:
- 数据保密性:保证数据内容在传输的过程中不会被第三方查看,防止用户数据信息的泄漏。
- 数据完整性:及时发现被第三方篡改的传输内容,一旦发现数据被篡改过则拒绝接收。
- 身份校验安全性:保证数据到达用户期望的目的地。客户端需要验证目前正在通信的对端是否为期望的服务器,而非假冒的服务器。反之,服务器也可以对客户端进行有效性验证。
3.1 如何通过SSL/TLS协议实现数据保密性?
HTTPS中,数据保密性指对客户端和服务端传输的HTTP明文数据进行加密传输。使用的算法为对称加密算法,如AES。数据保密性实现流程如下图:
图3 数据保密性实现流程
数据保密性需要通信双方具有相同的密钥,而且这个密钥只能通信双方知道,不能被第三方获取。实际通信中,这个密钥并不是固定不变的,也不会保存到磁盘文件中。客户端每次和服务器建立新连接的时候,都会重新协商出相同的密钥。在SSL/TLS协议的第一阶段——握手协商阶段,服务器和客户端会交互一些报文信息,服务器和客户端根据报文中的信息各自生成相同的密钥,并把密钥保存在内存中。一旦这个连接断开,内存中的密钥将会自动销毁,避免密钥的泄漏。
3.2 如何通过SSL/TLS协议实现数据完整性?
数据完整性用于防止HTTP数据被篡改,如果一旦发现数据被篡改则拒收数据包。使用的算法称作消息验证码算法(MAC)。数据完整性实现流程如下图:
图4 数据完整性实现流程
和数据保密性中的密钥获取方式一样,这里的密钥也是在SSL/TLS密钥协商阶段生成的、相同的、并保存在各自内存中。
3.3 如何通过SSL/TLS协议实现身份校验的安全性?
HTTPS中,客户端需要对通信端的身份有效性进行校验,确定客户端是和期望的真正服务端通信,而非和冒充的攻击者进行通信。
身份校验安全性主要利用数字证书技术实现。数字证书涉及的概念非常多,比如数字证书签发、CA证书、根证书、证书链、证书有效性校验、非对称密钥算法、签名/验证等,本文不做全面介绍,仅描述SSL/TLS涉及的概念:
3.3.1 非对称密钥算法
对称密钥算法中,加解密操作使用的密钥是同一个,且通信双方都需要知道这个密钥。而非对称密钥算法有两个密钥,组成一个密钥对;可以公开的密钥为公钥,公钥谁都可以知道,不怕泄漏;需要保密不能泄露的密钥称为私钥,私钥只有自己知道,不能被泄漏;通信双方的每一方,可以把自己的公钥发送给对端,但自己的私钥一定只有自己知道;同一份数据,使用公钥加密,私钥可以解密,反之,私钥加密,公钥可以解密。
图5 非对称密钥用法一——通信数据加密传输
如图5所示,在SSL/TLS协议中,存在使用非对称密钥算法对通信数据进行加密传输的操作,在使用非对称密钥算法对通信数据进行加密传输的场景将使用图5中左图的流程。这里需要注意图5右图流程,公钥是公开的,谁都可以知道,用私钥加密的数据是不具有保密性的,因为只要拥有公钥就能解密数据,所有窃听者都可以取到公钥,都会看到真实数据内容。实际上,图5右图“私钥加密-公钥解密”的使用场景称作签名的生成和校验,SSL/TLS协议也会用到,签名生成和验证流程如下图:
图6 非对称密钥应用二——通信数据签名的生成及验证
私钥加密的数据——签名值——不具备保密性,但却有校验作用。图7中,通信数据是明文消息加上该消息的签名值,签名值用于对明文消息进行校验,验证明文消息的正确性、是否被篡改过。
非对称密钥算法的用法,总结下来就是:
📌公钥加密-私钥解密➜用于数据加密传输➜通信数据是密文
📌私钥加密-公钥解密➜用于签名的生成和校验➜通信数据是明文消息加上消息签名值
3.3.2 数字证书
数字证书的签发、数字证书的校验、证书链的相关细节,本文不做详述,只要知道以下几点:
①HTTP到HTTPS,客户端和服务器涉及的一些改造,主要包括
- 服务端
-服务端需要针对某个服务配置SSL/TLS相关配置项,如密码套件、证书/私钥文件路径。
-部署由CA机构签发的,包含服务器公钥、服务器域名信息的数字证书,可公开证书。
-部署和公钥配对的私钥文件,私钥文件要具有一定安全保护措施,不能被泄漏。
- 客户端
-浏览器配置CA证书、根证书等文件,一般默认内置。
②证书的使用主要在SSL/TLS协议握手协商阶段,简述如下:
-客户端和服务端建连后,在SSL/TLS协议握手协商阶段初期,服务端将自己的数字证书发送给客户端,服务端私钥文件自己使用。
-客户端收到服务器数字证书后,通过配置的CA证书、根证书,依据证书链的校验逻辑,验证服务器数字证书的有效性,一旦验证通过,说明服务器身份正确。
-客户端从数字证书中取出服务器公钥,服务端从自己的私钥文件中取出服务器私钥。
之后,客户端和服务端,就会使用这对非对称密钥进行SSL/TLS协议握手协商阶段的其他处理。RSA密钥协商算法中使用了图5的用法,而DHE、ECDHE密钥协商算法中使用了图6的用法。
四、总结
在互联网快速发展的今天,网络安全成为关系经济平稳运行和安全的重要因素,而随着国际信息安全环境日趋复杂,西方加紧对我国的网络遏制,并加快利用网络进行意识形态渗透,我国的网络安全面临严峻挑战,中国移动作为我国基础网络设施的运营商,未来将加速网络安全方面的相关建设。