SSL 证书和浏览器到 Web 服务器的连接
Posted
技术标签:
【中文标题】SSL 证书和浏览器到 Web 服务器的连接【英文标题】:SSL Certificates and browser to web-server connectivity 【发布时间】:2012-12-04 15:47:29 【问题描述】:我确信这包含在 SSL 证书/HTTPS 规范的详细信息中,但我并不完全理解这个主题。
如果现代浏览器连接到 HTTPS 站点,则 HTTP 请求的正文会被加密。 SSL 证书本质上是用于在客户端和服务器之间来回通信的“公钥”吗?
难道黑客不能从公共站点获取公钥,比如“https://www.google.com”并监控客户端/服务器流量并解密数据吗?
此外,客户端是否需要验证证书的“颁发者”。例如,自签名证书客户端不需要验证,但对于受信任颁发者提供的证书,在证书验证过程中会发生什么?
【问题讨论】:
【参考方案1】:服务器的证书包含一个公钥,实际上每个人都可以看到。该密钥反过来在服务器和客户端之间的握手期间使用,以创建一个唯一的会话密钥,该密钥将用于加密任何进一步的消息:
http://en.wikipedia.org/wiki/Secure_Sockets_Layer#TLS_handshake_in_detail
黑客无法从公共站点获取公钥,比如说 “https://www.google.com”并监控客户端/服务器流量和解密 数据?
黑客不会知道会话密钥。他会听(毫无意义的)加密的东西。
此外,客户端是否需要验证证书的“颁发者”。为了 例如,自签名证书客户端不需要验证,但 从受信任的颁发者提供的证书,在 证书验证流程?
如您所说,证书的颁发者已根据预定义的受信任机构列表进行验证。链中的任何证书也将被验证,包括受信任的颁发者、到期日期。此外,每个证书都包含指向证书吊销列表(CRL 分发点)的 URL,客户端将尝试从此类 URL 下载列表并确保手头的证书没有被吊销。
【讨论】:
“如您所说,证书的颁发者已根据预定义的受信任机构列表进行验证。” ——所以客户端有代码来“验证”受信任的权威。我正在使用 Java,该代码在哪里嵌入以使用 HTTPSURLConnection 库验证权限? 我指的是浏览器。他们都在幕后执行这些检查。如果您需要使用代码手动执行此操作,您更有机会提出一个新问题(我已经在 .net 中完成了这些工作,而不是在 java 中)。 浏览器中有代码,并且存在基于 Java 的网络浏览器。如果我使用的是基于 Java 的浏览器,我想知道代码是如何在幕后工作的。但你的回答回答了我的核心问题。 很高兴这回答了你的问题 :)以上是关于SSL 证书和浏览器到 Web 服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章