我有一个关于SSL中公钥认证的高级问题(在openSSL上做一个学校项目)。无论如何,据我所知,这基本上就是SSL的工作原理..
服务器使用RSA或DSA创建私钥。使用私钥创建公钥并将公钥添加到其证书中。证书是自签名的或发送给证书颁发机构进行数字签名。
当客户端希望连接到服务器时,它会请求证书,检查其是否受信任,然后使用证书公钥加密其消息。邮件将发送到服务器并使用私钥解密。
这是我的问题所在。服务器如何安全响应?公钥是公共的,所以如果它用私钥加密并期望客户端使用公钥解密,中间的某个人也可以解密...我能看到的唯一解决方案是角色是否反转而客户端变为服务器,反之亦然。
有人在这里有一些指导吗?我很感激!
答案 0 :(得分:1)
公钥可用于加密预主密钥(在1.3之前的TLS版本中),可由服务器解密。然后从该预主密钥导出一组对称密钥 - 例如AES密钥。然后,该密钥可用于后续信息。这也称为混合加密,因为它涉及非对称(公钥/私钥)和对称(单密钥)加密。
或者,私钥可用于使用包括Ephemeral Diffie-Hellman的身份验证协议进行身份验证。 Diffie-Hellman是一种非对称算法(就像RSA一样),可用于在没有窃听者获得密钥知识的情况下就预主密钥达成一致。短暂意味着Diffie-Hellman密钥不是持久的,换句话说,每次都执行完整的DH协议。在这种情况下,RSA用于使用签名而不是加密进行身份验证。这个协议具有即使私钥在以后被暴露也无法解密SSL协议的属性(这称为前向保密)。
所以答案是RSA不用于加密所有数据,它只用于建立对称会话密钥的过程中。这些密钥用于加密(并保护完整性和真实性)后续消息中的数据。请注意,如果在SSL / TLS中完全使用RSA,则它取决于所选的密码套件。
答案 1 :(得分:0)
你是对的。任何人都可以解密由服务器加密的消息(私钥),因为它们具有相应的公钥。但是,这里存在一定程度的安全性,因为只有相应的公钥才能解密由私钥加密的数据。因此,客户端可以确定消息确实是由服务器发送的,因为只有服务器具有私钥(理想情况下)。
此外,TLS / SSL协议不仅依赖于非对称加密(计算成本昂贵),而且还用于密钥交换,以交换用于派生用于会话的密钥的数据。 实际密钥永远不会传输。