请注意,这不是关于 SSL 通信如何在浏览器(我研究并理解它)和客户端之间发生的,而是关于其他方面的。
使用Digicert 的 SSL 机制解释,我了解了数据在浏览器和服务器之间是如何加密的。以下是我的理解。
- 浏览器将向服务器发送请求以获取一些资源。服务器检查请求的协议是否为 HTTPS,如果是,则它将在响应中发送其证书(此证书已由某个 CA(证书颁发机构,如 Digicert)签名)。
- 浏览器将通过验证在其有效 CA 池中查找签名机构来检查证书是否有效。
- 如果浏览器发现该证书是由有效的 CA 签名的,则它会生成一个会话密钥并使用证书中存在的公钥对其进行加密。
- 浏览器会将这个加密的会话密钥发送到服务器,服务器将解密会话密钥。服务器将向浏览器发送回一个确认,该确认将使用会话密钥进行加密。
- 上述步骤完成 SSL 握手,然后在浏览器和服务器之间开始安全通信。
问题:
根据我的上述理解:
- 浏览器将生成一个会话密钥并使用服务器的公钥对其进行加密。但是浏览器将使用哪种加密算法(或通常称为密码算法)?
- 如何确定密码选择,浏览器和服务器是否会使用相同的密码/密钥大小进行加密和解密?
- SSL 握手完成后,所有通信都将使用对称会话密钥进行加密,但浏览器又将使用哪种加密算法?
- 浏览器使用的加密算法是否依赖于从服务器收到的证书?
- 还是浏览器执行的所有加密都使用相同的密码算法执行?
- 如果我错了,请纠正我,算法或密码信息也存在于证书中?该信息如何存储在证书中?
- 在生成证书时,我需要说明哪种算法、多少位加密、填充等?
基于上面的答案,我将有一个最重要的问题 - 假设我正在向某人提供我的服务器的私钥,以便他可以监控我的服务器的 SSL 流量,然后除了向他提供我需要的所有其他东西的私钥之外小心。我需要告诉他我在服务器上使用的算法或密码吗?