HTTPS(HyperText Transfer Protocol Secure)建立链接的过程主要是通过TLS(Transport Layer Security)协议来实现的。HTTPS的链接建立过程可以分为以下几个步骤:
1. **客户端发起请求**
- 客户端向服务器发送一个请求,请求建立一个安全连接。这个请求通常包括客户端支持的TLS版本、加密算法、压缩方法等。
2. **服务器响应**
- 服务器接收到请求后,会选择一个TLS版本和加密算法,并将其发送给客户端。同时,服务器还会发送自己的数字证书,数字证书中包含服务器的公钥以及由权威机构(CA)签名的服务器身份信息。
3. **客户端验证服务器证书**
- 客户端接收到服务器的数字证书后,会验证证书的有效性。验证过程包括检查证书是否由受信任的CA签名、证书是否在有效期内、证书中的域名是否与服务器域名匹配等。如果证书验证失败,客户端会终止连接。
4. **客户端生成会话密钥**
- 验证通过后,客户端生成一个随机的对称加密密钥(称为会话密钥),并使用服务器的公钥加密这个会话密钥。
5. **客户端发送加密的会话密钥**
- 客户端将加密的会话密钥发送给服务器。由于会话密钥是用服务器的公钥加密的,只有服务器能够解密获取会话密钥。
6. **服务器解密会话密钥**
- 服务器接收到加密的会话密钥后,使用自己的私钥解密,获取到会话密钥。
7. **双方使用会话密钥进行通信**
- 此时,客户端和服务器都持有相同的会话密钥。后续的通信过程将使用对称加密算法和这个会话密钥进行加密和解密。
8. **握手结束,安全通信开始**
- 握手过程结束,客户端和服务器开始使用会话密钥进行加密通信,保证数据的机密性和完整性。
举个例子
假设你在浏览器中访问一个HTTPS网站,比如 `https://www.example.com`。这个过程会如下进行:
1. **客户端发起请求**:
- 你输入网址并按下回车键,浏览器会向 `www.example.com` 服务器发送一个请求,要求建立安全连接。
- 请求内容包括浏览器支持的TLS版本、加密算法等信息。
2. **服务器响应**:
- `www.example.com` 服务器接收到请求后,选择一个TLS版本和加密算法,返回给浏览器。
- 服务器同时发送自己的数字证书,证书中包含服务器的公钥和由权威CA签名的服务器身份信息。
3. **客户端验证服务器证书**:
- 浏览器接收到服务器的证书后,会验证证书的有效性。如果证书有效,浏览器继续下一步;否则,浏览器会显示警告信息,提示用户连接不安全。
浏览器收到服务器的数字证书后,会进行一系列的验证操作:
-
验证证书的签名:
- 浏览器首先会检查证书是否由受信任的证书颁发机构(CA)签名。
- 浏览器内部维护了一个受信任的CA列表。如果银行的证书是由这些受信任的CA签名的,浏览器就会认为签名有效。
- 签名验证过程涉及使用CA的公钥解密证书中的签名信息,并与证书内容进行比对,确认内容未被篡改。
-
验证证书是否在有效期内:
- 证书中包含了有效期的开始时间和结束时间。浏览器会检查当前日期是否在这个有效期内。
- 如果证书已经过期或还未生效,浏览器会认为证书无效。
-
验证证书中的域名:
- 浏览器会检查证书中的域名信息(通常是
Common Name
或Subject Alternative Name
)是否与当前访问的网站域名匹配。 - 在这个例子中,证书中应该有
www.bankexample.com
的信息。如果域名不匹配,浏览器会认为证书无效,因为它可能是试图进行“中间人攻击”(MITM)。
- 浏览器会检查证书中的域名信息(通常是
-
检查证书的吊销状态:
- 浏览器还可能会检查证书是否被吊销(通过在线证书状态协议(OCSP)或证书吊销列表(CRL))。如果证书被标记为吊销,则意味着它不再被信任,可能是因为证书的私钥泄露或其他原因。
4. **客户端生成会话密钥**:
- 验证通过后,浏览器生成一个随机的会话密钥,并使用服务器证书中的公钥加密这个会话密钥。
5. **客户端发送加密的会话密钥**:
- 浏览器将加密的会话密钥发送给 `www.example.com` 服务器。
6. **服务器解密会话密钥**:
- `www.example.com` 服务器使用私钥解密获取会话密钥。
7. **双方使用会话密钥进行通信**:
- 浏览器和 `www.example.com` 服务器都持有相同的会话密钥,后续的所有数据传输都使用这个会话密钥进行加密和解密。
8. **握手结束,安全通信开始**:
- 握手过程结束,浏览器与 `www.example.com` 服务器开始进行加密通信,确保数据传输的机密性和完整性。
通过上述步骤,HTTPS确保了数据在传输过程中的安全性,防止数据被窃取或篡改。