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 服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章

关于网站服务器的https访问,真的需要购买证书吗

如何通过java程序来加载客户端证书进行ssl连接?

将 SSL 添加到 TcpListen 服务器?

发生ssl错误 无法建立到该服务器的安全连接

认证域名与SSL证书的区别

openssl生成SSL证书的流程