HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是HTTP协议的安全版本。它在HTTP的基础上加入了SSL/TLS协议,用于对数据进行加密,并确保数据传输过程中的机密性、完整性和身份验证。
在HTTPS出现之前,HTTP协议以明文形式传输数据。这意味着:
数据可以被窃听(机密性缺失):
任何在数据传输路径上的人(如你的ISP、咖啡馆的Wi-Fi管理员、网络攻击者)都可以截获并查看你发送和接收的数据,包括登录密码、信用卡信息、聊天内容等。
数据可以被篡改(完整性缺失):
中间人可以修改传输中的数据。例如,将你访问的合法银行网站链接替换成钓鱼网站,或者在网页内容中注入恶意代码。
身份可能被冒充(身份验证缺失):
你无法确定你正在访问的网站是否是真正的目标网站,可能是一个伪造的“钓鱼”网站。
HTTPS就是为了解决这些问题而设计的。
HTTPS加密是如何工作的?(核心机制:SSL/TLS握手)
HTTPS的核心在于SSL(Secure Sockets Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)协议。
一个典型的HTTPS通信过程分为两个阶段:
阶段一:SSL/TLS握手(建立安全连接)
这是最关键的部分,双方协商加密方式并验证身份。过程大致如下:
客户端发起请求(Client Hello):
浏览器(客户端)向服务器发送一个“Client Hello”消息。
消息中包含:客户端支持的TLS版本、客户端支持的密码套件(加密算法组合,如RSA、AES、SHA等)、一个随机数(ClientRandom)。
服务器响应(Server Hello):
服务器收到请求后,选择一个双方都支持的TLS版本和密码套件。
服务器发送“Server Hello”消息,包含:选定的TLS版本、选定的密码套件、服务器生成的随机数(ServerRandom)。
服务器发送证书(Server Certificate):
服务器将其数字证书发送给客户端。这个证书由受信任的**证书颁发机构(CA)**签发,包含了服务器的公钥、域名、有效期等信息,并附有CA的签名。
(可选)服务器密钥交换(Server Key Exchange): 某些加密套件可能需要服务器发送额外的密钥交换参数。
服务器发送结束(Server Hello Done):
服务器通知客户端,服务器部分的初始信息发送完毕。
客户端验证证书并生成预主密钥(Pre-Master Secret):
验证证书: 客户端检查证书是否由受信任的CA签发、是否过期、域名是否匹配当前访问的网站。如果验证失败,浏览器通常会警告用户。
生成预主密钥: 客户端生成一个随机数,称为预主密钥(Pre-Master Secret)。
加密并发送预主密钥: 客户端使用从证书中获取的服务器公钥,将预主密钥加密后发送给服务器。由于只有服务器的私钥才能解密,这就保证了预主密钥的传输是安全的。
客户端发送结束(Client Key Exchange):
客户端发送一个“Client Key Exchange”消息,内容就是刚才加密发送的预主密钥(加密形式)。
客户端还可能发送其他消息,如证书请求(如果需要客户端认证)、扩展消息等。
服务器解密预主密钥:
服务器使用自己的私钥解密收到的预主密钥。
双方计算主密钥(Master Secret):
关键步骤! 客户端和服务器现在都拥有了三个随机数:ClientRandom、ServerRandom和Pre-Master Secret。
双方使用预先商定的密钥派生函数(如伪随机函数PRF),将这些随机数作为输入,计算出相同的主密钥(Master Secret)。这个主密钥是后续加密通信的基础。
客户端发送完成消息(Change Cipher Spec):
客户端通知服务器,后续所有的通信都将使用协商好的加密算法和主密钥进行加密。
客户端发送 Finished 消息:
客户端发送一个加密的“Finished”消息,这个消息是之前所有握手消息的哈希值(用主密钥加密)。服务器可以解密并验证这个哈希值,以确认握手过程没有被篡改,并且客户端确实拥有主密钥。
服务器发送完成消息(Change Cipher Spec):
服务器通知客户端,后续所有的通信都将使用协商好的加密算法和主密钥进行加密。
服务器发送 Finished 消息:
服务器发送一个加密的“Finished”消息,内容是之前所有服务器端握手消息的哈希值(用主密钥加密)。客户端可以解密并验证这个哈希值。
一旦双方都成功验证了对方的Finished消息,握手阶段就结束了。 此时,一个安全的通信通道已经建立。
阶段二:加密数据传输
握手完成后,客户端和服务器使用在握手阶段协商好的对称加密算法和主密钥(或从主密钥派生出的会话密钥)来加密和解密所有传输的数据(如HTML页面、图片、表单提交等)。对称加密因为加解密速度快,适合大量数据的传输。
HTTPS加密的关键技术点:
非对称加密(公钥加密):
用于SSL/TLS握手阶段,安全地交换对称密钥(主密钥)。客户端用服务器的公钥加密数据,只有服务器用私钥才能解密。
对称加密(私钥加密):
用于加密实际传输的大量数据。加解密速度快,但密钥分发是个问题(这就是为什么需要非对称加密来交换对称密钥)。
哈希函数(消息摘要):
用于生成数据的固定长度摘要(指纹)。即使数据有微小变化,摘要也会完全不同。在握手过程中用于验证消息的完整性(Finished消息)。
数字证书:
由可信的第三方(CA)颁发,绑定服务器的公钥和身份信息(域名)。客户端通过验证证书来确认服务器的身份,防止中间人攻击。
证书颁发机构(CA):
操作系统、浏览器等预装了众多CA的根证书。客户端通过信任这些根证书来验证网站证书的合法性。
HTTPS的优势总结:
数据保密性: 加密传输,防止窃听。
数据完整性: 通过哈希校验,防止数据被篡改。
身份认证: 通过证书验证,确认网站的真实身份,防止钓鱼。
提升搜索引擎排名: Google等搜索引擎优先推荐使用HTTPS的网站。
增强用户信任: 浏览器地址栏显示安全锁标志,让用户更放心。
HTTPS的挑战:
性能开销: 加密/解密需要计算资源,相比HTTP稍慢(但现代硬件和优化算法已大大缓解)。
证书成本和管理: 获取、部署、更新和管理证书需要成本和操作(虽然现在有许多免费证书方案如Let’s Encrypt)。
配置复杂性: 服务器需要正确配置SSL/TLS。
总结:
HTTPS通过结合非对称加密、对称加密、哈希函数和数字证书等技术,在HTTP的基础上构建了一个安全的通信层。它通过复杂的SSL/TLS握手过程建立安全的通道,然后使用高效的对称加密传输数据,从而有效保护了用户与网站之间的通信安全,是现代互联网不可或缺的基础设施。