Bru*_*uce 6 ssl https public-key-encryption public-key
我有一个依赖HTTPS构建的Web服务器.因此,我的服务器维护其私钥并发布任何客户端可用于加密其请求的公钥.由于我的服务器是唯一一个拥有私钥来解密使用服务器公钥加密的任何消息的服务器,因此以这种方式发送的任何请求都可以被认为是安全的.
不过我的问题是在回复部分.当服务器将响应发送回客户端时,服务器使用哪个公钥来加密响应消息?
我假设服务器将使用客户端的公钥来加密响应(默认情况下?或配置?).如果是这样,服务器是否从发送给服务器的请求中知道客户端的公钥,或者其他什么方式?
更新:如果我理解不正确,那么在将来的通信中,各方如何知道如何解密另一方发送的消息?某些关键是共享的还是某种方式?
谢谢!
War*_*Dew 11
公钥不直接用于加密HTTPS连接上的任何底层HTTP流量; HTTP请求和HTTP响应都不以这种方式加密.相反,在初始SSL握手期间,会话客户端和服务器之间协商会话特定的对称密钥,然后使用对称密钥在两个方向上加密HTTP连接上的所有流量.
协商对称密钥的具体机制取决于客户端和服务器之间协商的特定密码套件.此协商始终涉及服务器的公钥和客户端发送的值; 它还可能涉及诸如客户端公钥之类的项目或来自服务器和客户端的单独的连接特定公钥.
其他详细信息可以在RFC 5246中找到,从这里开始:
http://tools.ietf.org/html/rfc5246#section-7.3
没有。
公钥和私钥用于协商对称加密密钥,该对称加密密钥将在该会话期间使用。非对称加密使用两个密钥(私有和公共),对称加密仅使用一个。
您的服务器将其公共密钥发送给客户端,客户端会验证该密钥签名(检查CA和所有内容),然后使用它来加密将用作对称加密密钥的随机选择的密钥,并将其发送到服务器。因为只有私钥才能解密该消息,所以消息是安全的,因此只有服务器可以解密它。然后,服务器接受客户端选择的密钥,然后它们开始使用对称加密传输数据。
为什么要这样?非对称加密在计算上非常昂贵,因此仅用于确保客户端和服务器可以协商安全的对称密钥而无需以纯文本形式发送。对称加密很便宜。
对称加密也是安全的,问题在于两个部分都必须在启动之前知道密钥,这是一个大问题。通过使用非对称加密来协商密钥,可以解决此问题。
更新
好吧,@ EJP似乎与我的回答不一致,因此我尝试查找一些其他文档来以一种简单的方式对此进行解释。
http://www.techradar.com/news/software/how-ssl-and-tls-works-1047412
SSL说明
当您访问银行的网站时,银行的服务器将在您登录之前使用HTTPS协议自动将您重定向到其安全站点。这将导致浏览器和银行的站点使用SSL协商安全通道。
协商有点像这样(请注意,我已经对其进行了大大简化)。浏览器发送一条消息,说明它可以支持的最新SSL版本以及可以使用的对称算法列表。Web服务器发送回一条消息,其中包含SSL版本和将使用的算法。
它也发送其证书。客户端使用浏览器随附的已知证书来验证证书;换句话说,它检查它是否已由受信任的CA签名并且还没有过期。
如果证书有效,浏览器将为该会话生成一次性密钥,并使用服务器的公共密钥(它是证书的一部分)对其进行加密,然后将其发送到服务器。服务器解密密钥,然后将该密钥与约定的对称算法一起用于其余的会话。
我可能会感到困惑。