- 客户端发起请求
- 当客户端(如浏览器)尝试访问一个使用 SSL 加密的网站时,它首先会向服务器发送一个连接请求,请求建立安全的 SSL 连接。这个请求包含客户端支持的 SSL 协议版本、加密算法套件等信息。例如,浏览器可能会告诉服务器它支持 TLS 1.3(SSL 的后续协议)以及一系列的加密算法,像 RSA、AES 等算法组合。
- 服务器响应并发送证书
- 服务器收到客户端的请求后,会选择一个双方都支持的 SSL 协议版本和加密算法套件。然后,服务器将自己的 SSL 证书发送给客户端。这个证书包含服务器的公钥、服务器的域名等信息,并且证书是由受信任的证书颁发机构(CA)签名的。例如,对于一个银行网站的服务器,它发送的证书能够证明该服务器确实是银行官方的服务器,并且包含了用于后续加密通信的公钥。
- 客户端验证证书
- 客户端收到服务器发送的证书后,会使用预先安装的 CA 根证书来验证服务器证书的合法性。客户端会检查证书是否在有效期内、证书的域名是否与请求的域名一致、证书的签名是否可以通过 CA 的公钥验证等。如果证书验证不通过,客户端通常会向用户显示警告信息,提示可能存在安全风险。
- 以浏览器为例,如果证书验证失败,浏览器可能会显示 “此网站的安全证书有问题” 之类的警告,让用户谨慎操作。
- 协商加密密钥
- 在证书验证通过后,客户端和服务器开始协商用于加密通信的对称加密密钥。这个过程通常是利用非对称加密算法来完成的。客户端会生成一个随机的对称加密密钥,然后使用服务器证书中的公钥对这个密钥进行加密,并将加密后的密钥发送给服务器。
- 由于只有服务器拥有对应的私钥,所以只有服务器能够解密这个被加密的对称加密密钥。例如,假设客户端生成的对称加密密钥是 “123456”(实际情况会复杂得多),用服务器公钥加密后发送,服务器收到后用私钥解密得到 “123456”。
- 建立加密通道并通信
- 服务器和客户端都得到对称加密密钥后,就可以使用这个密钥和选定的对称加密算法(如 AES)来建立加密通道。此后,客户端和服务器之间传输的数据,如网页内容、用户提交的数据等,都会使用这个对称加密密钥进行加密和解密。这样,即使数据在传输过程中被第三方截取,由于没有对称加密密钥,第三方也无法解密数据,从而保证了网络通信的安全性。
- 例如,在用户登录网站的过程中,用户名和密码等敏感信息在加密通道中安全地从客户端传输到服务器,服务器解密后进行验证处理。