【问题标题】:HTTP/HTTPS content authenticationHTTP/HTTPS 内容认证
【发布时间】:2018-02-18 20:04:14
【问题描述】:
我可以在谷歌上找到任何快速的答案。最有可能的答案在于 http 或 https 上的 RFC 文档中的某个地方,但是我无法(太费时)获得这些信息。
所以这是一个问题:
通过 HTTP 提供的网页内容是否由服务器进行数字签名? HTTPS 的同样问题。
如果是,使用代理时它如何正常工作?我认为代理可以篡改数据,用自己的私钥对被篡改的数据进行签名,并声称相应代理的公钥实际上是原始服务器的真正公钥?我假设客户端无法检查原始服务器的公钥,因为有一个代理可能撒谎。
如果这是一个转储问题并且可以在互联网上轻松搜索,我很抱歉,但我发现的每个答案都对我提出了一些疑问。
谢谢你的帮助:)
【问题讨论】:
标签:
http
authentication
https
proxy
【解决方案1】:
通过 HTTPS 发送的内容经过加密,客户端验证与之通信的主机证书的真实性。服务器使用由证书颁发机构 (CA) 签署的 TLS/SSL 密钥/证书。CA 确保他们只签署域合法所有者的证书。 CAs 他们自己的证书安装在您的浏览器/操作系统中。通过使用这些预安装的证书,浏览器可以检查远程服务器使用的密钥是否由受信任的 CA 签名。
中间人没有原始密钥,也没有由 CA 为相关域签名的另一个密钥。因此,中间人无法在不破坏 HTTPS 的情况下修改内容。
另一方面,如果您想使用代理来缓存请求,代理可以终止 HTTPS 连接。这意味着代理有自己的服务器连接并验证证书。为了保护与客户端的连接,代理充当 CA,并使用带有自签名证书的 HTTPS 连接。为避免您的浏览器抱怨连接不安全,您需要安装代理自己的 CA 证书。
HTTP 内容未经签名,可被篡改。
编辑 2018-06-15:
我在这里对“签名”一词并不十分准确。服务器实际上并未对它发送的内容进行签名。这意味着如果您存储来自服务器的响应,则无法证明它们来自该服务器,换句话说:standard TLS dose not provide non-repudiation。但是,服务器的真实性是在握手期间建立的。客户端使用服务器公钥加密主密钥。只有拥有私钥的服务器才能解密主密钥并从中派生会话密钥。
另一方面,CA 实际签署证书。 CA 不能有效地否认它为服务器证书的真实性签名。