【问题标题】:Check if unknown / remote server supports HTTPS检查未知/远程服务器是否支持 HTTPS
【发布时间】:2020-03-01 16:43:27
【问题描述】:

是否可以检查远程服务器是否支持 https?
目前我正在请求 https,如果它不起作用重试 http,如果仍然不起作用则显示错误。
HTTP 中是否嵌入了指示是否支持 https 的功能? 我的意思不是重定向等,因为这些必须在服务器上实现并且并非总是如此。

【问题讨论】:

    标签: http https server request transport


    【解决方案1】:

    默默地回退到 HTTP 听起来很危险。攻击者(即中间人)可能能够通过阻止您对 HTTPS 的请求来强制您使用不安全的通道。因此,我一般不会推荐这种方法。

    一般来说,您应该让您的用户决定使用哪种协议。如果他们指定了 https,你不应该默默地降级而是抛出一个错误。但是,如果他们指定 http,也可以先尝试 https,如果失败则静默回退到 http(因为他们首先请求了 http)。

    对您的请求的一般回答:您只能尝试使用 https 来检查服务器是否支持 https。有一个名为 HTTP Strict Transport Security (HSTS) 的 HTTP(s) 扩展,它允许服务器指示对它们的所有请求应始终仅通过安全通道执行。如果您在对 HTTPS 请求的响应中收到此类标头,则可以在将来为主机强制使用 https。请注意,您必须忽略通过不安全 HTTP 接收的此类标头。

    一般来说,您不能相信您通过纯文本 HTTP 收到的任何信息来为您提供有关服务器安全选项(例如对 TLS 的支持)的任何指示,因为这些信息可能会被中间人任意欺骗中间攻击者。事实上,防止这种无法检测到的变化是首先使用 TLS / HTTPS 的主要原因之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      相关资源
      最近更新 更多