不支持SSL时对HTTPS请求进行规范处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不支持SSL时对HTTPS请求进行规范处理相关的知识,希望对你有一定的参考价值。

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

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

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

是否有规范的方法来处理这种情况?

答案

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

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

另一答案

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

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

user_canceled

由于与协议故障无关的某些原因,此握手被取消。如果用户在握手完成后取消操作,则通过发送close_notify来关闭连接更为合适。此警报后面应该是close_notify。此消息通常是一个警告。

另一答案

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

以上是关于不支持SSL时对HTTPS请求进行规范处理的主要内容,如果未能解决你的问题,请参考以下文章

Qt 之 使用 https发送 HTTP请求(使用OPENSSL库)

web高级第一节

http和https

如何修复无效请求(不支持的 SSL 请求)

iOS开发 支持https请求以及ssl证书配置(转)

Nginx将http升级到https并且同时支持http和https两种请求