一、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的用法。
四、总结
在互联网快速发展的今天,网络安全成为关系经济平稳运行和安全的重要因素,而随着国际信息安全环境日趋复杂,西方加紧对我国的网络遏制,并加快利用网络进行意识形态渗透,我国的网络安全面临严峻挑战,中国移动作为我国基础网络设施的运营商,未来将加速网络安全方面的相关建设。