http 是否支持没有 https 的加密(如 STARTTLS)?

信息安全 tls 证书 http 证书颁发机构
2021-08-24 16:03:53

http支持加密https,类似于STARTTLSinsmtp吗?

这听起来像是一个愚蠢的问题,但请仔细想想。

银行需要强大的加密,没有它就无法开展业务。

但是,常规网站可能不一定会这样做,但仍然可以从随意加密中受益,从而防止多种攻击,就像STARTTLSsmtp.

因此,对于常规网站,如果浏览器在 ssl 方面存在任何问题(协议不兼容、移动设备功能不足或用户的明确偏好),它应该在没有加密的情况下安全地继续进行而不需要太多额外的麻烦。

是否有任何HTTP协议扩展允许在不明确使用的情况下进行加密https例如类似的东西Accept-Encoding: gzipContent-Encoding: gzip还是STARTTLSsmtp如果不是,为什么不呢?甚至想到了来自 WiFi 的 WPA2,它确实进行了加密,但不打扰证书或证书颁发机构。

基本上,我正在考虑类似 HTTPS-Everywhere 扩展,但它可以在没有https://地址方案的病毒宣传的情况下自动运行——不会强迫不想参与其中的人参与其中,就像https://地址方案一样,不需要划分地址方案,也不需要内容提供者承诺始终https://从那里支持。

4个回答

纯 HTTP 中有一个STARTTLS标准请注意,“STARTTLS”仍然是 SSL;它只是修改了动态,但没有避免这种方式的实现复杂性。

一般来说,没有人将 STARTTLS 用于 HTTP,主要是因为它不太安全确实,Web 浏览器的 SSL 的很大一部分是视觉反馈,通过它让用户意识到加密(著名的“挂锁图标”)。没有它,用户将无法知道他是否真的获得了 SSL,或者他是否正在浏览一个盗取他的密码和银行账户的假网站。

“协议不兼容”和“设备功率不足”是神话。当前运行的任何具有浏览功能的设备至少都知道如何执行 SSL 3.0,这足以保证良好的安全性。至于电源,我个人在 33 MHz 嵌入式 ARM CPU 上实现并运行 SSL;那是一种你认为不值得作为手表的设备。即使是基本的银行智能卡,嵌入在塑料矩形中的小芯片,也比这更强大。当人们说他们因为缺乏权力而不支持 SSL 时,这是一个谎言;他们应该说的是他们不支持 SSL,因为他们很懒惰。

至于“用户偏好”:嗯,那是一种无形的。然而,安全带在汽车中是强制性的,而且有充分的理由。事实上,无论“用户偏好”如何,整个社会都有权强制执行安全带,因为整个社会都必须支持一个粗心的司机因轻微事故变成严重残疾的后果,因为他没有系上腰带。同样的道理也适用于 SSL:我不想让用户“选择退出” SSL,因为这种选择退出是非常愚蠢的。

不应该

原因是,https://URI 方案向用户和浏览器发出信号,表明它在安全环境中运行,应采取预防措施防止安全信息泄漏到不安全的环境中。这是一个很好理解并且非常强大的系统。服务器用于从不安全连接切换到安全连接的机制是重定向到安全 URL。客户端使用的机制是使用 https 而不是 http 请求 URL。作为一项规则,这整件事是有效的。

但是为了更准确地回答您的问题,的,存在这样的事情。它是 HTTP/1.1升级标头这允许客户端和服务器直接协商协议。升级到 TLS 在RFC 2817中进行了描述。

客户端可能会发送这样的消息来确定服务器是否支持升级(来自 RFC 的示例):

   OPTIONS * HTTP/1.1
   Host: example.bank.com
   Upgrade: TLS/1.0
   Connection: Upgrade

虽然表明需要升级才能查看请求的资源的服务器响应看起来像这样(同样,来自 RFC):

   HTTP/1.1 426 Upgrade Required
   Upgrade: TLS/1.0, HTTP/1.1
   Connection: Upgrade

由于上述原因,这些几乎完全未使用;应该使用 HTTPS URI。出于安全考虑,“升级”机制是次要的选择。

尽管如此,“升级”机制还有其他用途:具体来说,它是Web 套接字的启动方式,也是客户端和服务器切换到SPDY协议的方式之一。

我认为您误解了 STARTTLS。该命令只是告诉另一台服务器,客户端想要执行 TLS,并且在服务器同意之后,正常的 TLS 握手将开始,例如使用证书和所有东西 - 与 https 相同。主要区别在于,您不会在 TCP 连接后立即提交 TLS,而仅在交换一些纯文本数据(欢迎消息、EHLO ...)之后才提交。并且 URL 不会告诉您是否使用了 TLS,这可能是好事也可能是坏事。

但是,是的,HTTP 有一个类似的机制,它也被广泛使用:通过代理隧道时的 CONNNECT 请求。这是在 RFC2818 中定义的,并且在同一个 RFC 中还定义了另一种升级机制,使用“升级”标头。此升级可以是可选的(如果服务器不支持,客户端需要但接受)或强制的(服务器需要 https)。

虽然 Upgrade 标头今天用于创建 WebSockets 连接,但我从未见过它用于 SSL 升级,我怀疑任何浏览器都支持它。

是的,它目前有望被https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-alt-svc-06定义为 HTTP/2 的扩展,并且正在编写实际的浏览器支持/committed/supported (bmo #1003448)在 2014 年底和 2015 年初启用 (bmo #1113790),根据http://daniel.haxx.se/blog/2015/03/06/tls-in-http2/,其中指出即将推出的Mozilla Firefox 37 可能是第一个带有机会加密 (OE) 的产品。