【问题标题】:Canonical handling of HTTPS request when SSL not supported不支持 SSL 时对 HTTPS 请求的规范处理
【发布时间】:2018-08-07 21:36:06
【问题描述】:

如果客户端请求的域没有有效的 CA 签名证书,而服务器不打算支持 HTTPS 但确实支持该域的 HTTP,那么在 Web 服务器中处理此问题的最佳方法是什么。请注意,服务器确实会处理其他域上的 SSL (HTTPS) 请求,因此它正在侦听 443。

这适用的示例是多个子域,其中子域是动态创建的,因此注册 CA 签名证书非常困难。

我看到人们尝试使用 HTTP 错误代码进行响应,但这些似乎没有实际意义,因为客户端(浏览器)将首先验证证书,并在处理任何 HTTP 之前向用户显示硬警告。因此,客户端只有在“继续”通过证书警告时才会看到错误代码。

有处理这种情况的规范方法吗?

【问题讨论】:

    标签: http ssl https webserver


    【解决方案1】:

    对于这种情况没有规范的方法。如果 HTTPS 被破坏,客户端不会自动降级到 HTTP,在这方面更改客户端将是一个非常糟糕的主意 - 攻击者攻击 HTTPS 所需要做的就是推断 HTTPS 流量以创建客户端降级到不受保护的 HTTP 流量。

    因此,您需要确保客户端不会尝试访问无法正常工作的 URL(即不要发布此类 URL),或者确保您拥有这些子域的有效证书,即调整创建子域的过程,使它们不仅有一个 IP 地址,而且还有一个有效的证书(可能使用通配符证书)。

    【讨论】:

      【解决方案2】:

      如果您正在处理子域,您可能可以为所有子域使用通配符证书。 将 CA 证书添加到您的客户端将删除警告(这是公司所做的,不用担心)。 例如,使用 Apache 托管时,您可以使用 VirtualDocumentRoot 添加域而无需编辑配置。看看这里提供的解决方案:Virtual Hosting in SSL with VirtualDocumentRoot

      【讨论】:

      • 在建议的情况下,通配符证书是不可能的,因为通配符仅适用于域级别“已加星标”,它必须是模式中的第一个字符,并且只允许一个星号。浏览器不支持星号之后的所有子级别的通配符。请假设 CA 签名的证书是不可能的。
      • 我假设您不需要签名证书,因为它会花费大量维护(生成 CSR、请求证书、安装它们),并且通配符证书不能满足您的需求,因为它们是部分的只回答。不是因为不可能。此外,我的回答是强迫您在不打算使用的服务器上使用 SSL,并且无需添加此功能。总之,Steffen 的回答是正确的。
      【解决方案3】:

      考虑到这些网站不必使用 SSL,网络服务器应该以适当的方式关闭它们的所有 SSL 连接。

      对此没有规范的方法,但RFC 5246 隐含地建议通过使用 user_cancel + close_notify 警报来中断服务器端的握手。如何实现是另一个问题,这将是默认 SSL 虚拟主机的配置。

      user_canceled

      由于某种与 协议失败。如果用户在 握手完成,只需发送一个 close_notify 更合适。应遵守此警报 通过 close_notify。此消息通常是警告。

      【讨论】:

        猜你喜欢
        • 2016-02-14
        • 2022-09-27
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-09
        • 2011-04-19
        • 1970-01-01
        • 2019-12-28
        相关资源
        最近更新 更多