第七章 确保Web安全的HTTPS
7.1 HTTP的缺点
HTTP主要有这些不足,例举如下
- 通信使用明文(不加密)内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
这些问题不仅在HTTP上出现,其他未加密的协议中也会存在这类问题。
7.1.1 通信使用明文可能会被窃听
TCP/IP是可能被窃听的网络
按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视
所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窥视行为。
加密处理防止被窃听
在几种防止窃听保护信息的几种对策中, 最普及的就是加密技术, 加密对象有以下几个:
- 通信的加密
HTTP 协议中没有加密机制,但可以通过和SSL( Secure Socket Layer,安全套接层)或TLS(Transport LayerSecurity,安全层传输协议)的组合使用,加密HTTP的通信内容用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTPover SSL。
- 内容的加密
对传输内容本身加密
前提是要求客户端和服务器同时具备加密和解密机制。主要应用在 Web 服务中。有一点必须引起注意由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。
7.1.2 不验证通信方的身份就可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在"服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端"等类似问题。
- 任何人都可发起请求
在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应
- 查明对方的证书
虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定对方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。
7.1.3 无法证明报文完整性, 可能已遭篡改
既无法确认信息是否准确
- 接收到的内容可能有误
没有任何办法确认, 发出的请求/响应和接收到的请求/响应是前后相同的
中间人攻击: 请求或响应在传输途中, 遭攻击者拦截并篡改内容的攻击
- 如何防止篡改
常用MD5和SHA-1等散列值校验, 但并不可靠便捷, 为有效防止这些弊端, 有必要使用HTTPS
7.2 HTTP+加密+认证+完整性保护=HTTPS
7.2.1 HTTP加上加密处理和认证以及完整性保护后即使HTTPS
我们把添加了加密认证机制的HTTP成为HTTPS
7.2.2 HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL( Secure Socket Layer)和TLS ( Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
7.2.3 相互交换密钥的公开密钥加密技术
SSL采用的是**公开密钥加密(Public-key cryptography)**的加密处理方式
- 共享密钥加密: 加密和解密同用一个密钥的方式
缺点:
- 使用两把密钥的公开密钥加密
公开密钥加密使用一对非对称的密钥。一把叫做私有密(privatekey),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得
使用公开密钥加密方式,**发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。**利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难的因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码破解还是存在希望的。但就目前的技术来看是不太现实的。
- HTTPS采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
所以应充分利用两者各自的优势,将多种方法组合起来用于通信在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
7.2.4 证明公开密钥正确性的证书
公开密钥的问题在于无法证明公开密钥就是货真价实的公开密钥
证书是一种用于验证实体身份、数字签名、加密通信等的数字文档。在网络安全领域,最常见的证书是数字证书,用于建立安全通信、验证网站身份等。
数字证书通常包含以下信息:
- 公钥: 证书中包含了一个实体(通常是一个服务器)的公钥。公钥用于加密数据,只有对应的私钥才能解密。
- 主体信息: 证书中包含了证书所有者的信息,如名称、组织等。
- 颁发者信息: 证书中包含了颁发者(Certificate Authority,CA)的信息。CA是一个受信任的实体,负责验证证书请求者的身份,然后颁发数字证书。
- 有效期: 证书有一个有效期限,指定了证书何时开始生效以及何时过期。过期的证书可能不再被信任。
- 数字签名: 证书中的信息经过数字签名,由颁发者使用其私钥生成。接收方可以使用颁发者的公钥来验证签名,确保证书的完整性和真实性。
在使用数字证书的场景中,最常见的是SSL/TLS通信中的服务器证书。当你在浏览器中访问一个使用HTTPS的网站时,浏览器会接收到服务器的数字证书,然后使用浏览器内置的根证书颁发机构(Root CA)公钥验证服务器证书的签名。如果验证通过,浏览器就信任该证书,建立安全连接。
数字证书的使用有助于建立信任关系、防止中间人攻击,确保通信的机密性和完整性。证书颁发机构是负责验证证书请求者身份的受信任实体,其公钥被广泛分发,以便用于验证由其签发的证书。
7.2.5 HTTPS的安全通信机制
HTTPS(HTTP Secure)是一种基于安全套接层(SSL/TLS)协议的HTTP通信协议,旨在提供更安全、加密的数据传输。以下是HTTPS的安全通信机制:
- 加密通信: HTTPS使用SSL/TLS协议来加密在客户端和服务器之间传输的数据。这意味着即使数据被中间人截获,也很难解密,因为加密算法使用了公钥和私钥,只有服务器才能解密客户端发来的加密数据,而只有客户端才能解密服务器发来的加密数据。
- 数字证书: 在建立HTTPS连接时,服务器需要向客户端提供一个数字证书,证明服务器的身份。数字证书由受信任的证书颁发机构(CA)颁发,其中包含了服务器的公钥。客户端通过CA的公钥验证数字签名,确保证书的有效性。这样,客户端就可以信任服务器的身份,防止中间人攻击。
- 密钥交换: 在建立连接的过程中,客户端和服务器还会协商对称密钥,用于实际的数据加密和解密。这个过程可以使用一些安全的密钥交换算法,如Diffie-Hellman密钥交换。
- 完整性保护: 除了加密通信外,SSL/TLS还使用消息认证码(MAC)来确保传输的数据完整性。这防止了数据在传输过程中被篡改。
- 支持最新的TLS协议版本: 为了保持安全性,使用最新版本的TLS协议是至关重要的。不安全或弱密码算法的使用可能会导致安全漏洞,因此建议使用TLS 1.2或更高版本。
- 强化密码套件: HTTPS使用一系列密码套件(cipher suites)来协商加密算法、密钥交换算法等。选择强大、安全的密码套件是保障HTTPS安全性的重要因素。
通过这些安全机制,HTTPS提供了对用户和网站的数据进行保护的安全通信环境,防范了许多网络攻击和窃听威胁。因此,对于传输敏感信息的网站,使用HTTPS是一种重要的安全实践。
SSL速度慢吗
SSL慢分为两种, 一种是指通信慢, 一种是指由于大量消耗CPU及内存等资源, 导致处理速度变慢
和使用HTTP相比,网络负载可能会变慢2到100倍。除去和TCP连接、发送HTTP请求·响应以外,还必须进行 SSL通信,因此整体上处理通信量不可避免会增加。
另一点是SSL必须进行加密处理。在服务器和客户端都需要进行加密和解密的运算处理。因此从结果上讲,比起HTTP会更多地消耗服务器和客户端的硬件资源,导致负载增强
为什么不一直使用HTTPS?
与纯文本通信相比, 加密通信会消耗更多的CPU及内存资源
节约购买证书的开销也是原因之一