将HTTP连接升级到SSL / TLS


8

我目前有一个服务器,该服务器会自动将所有HTTP请求重定向到等效的HTTPS站点。问题在于,似乎某些浏览器不接受SSL证书(StartSSL.com)或不支持SNI,因此它们会收到证书警告,并且用户将不会继续在网站上浏览。

是否有任何机制尝试使浏览器使用HTTPS而不是纯HTTP,并且在该机制不起作用时(例如,不接受证书或不支持SNI),它将继续使用HTTP。

目前,我正在将Apache 2.4与多个虚拟主机一起使用,这些虚拟主机都使用重定向HTTP连接Redirect / https://domain.example/


3
当证书不正确时,从HTTPS更改为HTTP,这是您永远不希望以访客身份发生的事情。证书不正确的事实应该是一个错误的迹象,恢复为未加密的连接是您最糟糕的事情。您最好的解决方案是通过使用另一个CA或不使用SNI来修复证书,使其与您的主机名匹配。
Teun Vink 2014年

好的,我知道了。但是,当我们期望有一个不支持HTTPS连接或不支持服务器提供的加密机制的浏览器。然后,该客户端(以我为例)将无法使用该站点,因为我会自动重定向到HTTPS等效站点。
foxylion

在当今世界,很有可能克服这一局限性。非常主要的站点只能切换到SSL。如果他们可以做到,那么您可以做到。
MichelZ 2014年

Answers:


15

如果https不起作用,浏览器切勿自行将其降级为http,因为攻击者需要做的就是使https不可用(例如,阻止端口443)。因此,唯一可行的方法是从服务器指示浏览器执行此操作,例如,发送http重定向。当然,这应该通过安全连接发送(否则,中间人可能会伪造它),但是不幸的是,安全连接失败确实是您的问题。

总结:不,这是不可能的,这更好。

顺便说一句,所有现代浏览器都支持SNI,但并非所有应用程序(例如Java应用程序等)都支持SNI。如果您在Web服务器上有多个域,但这些应用仅需要一个域,则可以将该域的证书设置为默认域。否则,您将需要获得(更昂贵的)证书,其中包含所有需要的域作为使用者替代名称。

进行另一个编辑:您可以尝试以https的方式从您的侧面下载图像,并使用img标签上的onerror处理程序检查是否成功。也许这不会触发用户可见的警告,但只会加载失败。如果成功,您将知道可以进行https访问并重定向用户。

除此之外,您还必须问自己,如果您也接受使用http的访问权限,为什么还要提供https。有些数据应该受到保护,或者不是。只要您提供http的后​​备选项,攻击者就很容易执行http而不是https。


1
说得很好。
蒂姆·布里格姆

3

首先,应该有可能为所有缺少SNI支持的客户端指定一个证书。这意味着在该IP地址上托管的所有域中,您至少可以为没有SNI的客户端使用其中一个域。

从http重定向到https时,您可以做的是两阶段重定向。从http到https的第一个重定向使用域名,您确保可以使用该域名,无论是否支持SNI。必须包含完整的原始URL,以便以后可以从此https网站重定向到正确的URL。

无论客户端是否支持SNI,使用或不使用SNI的域名的行为都可能不同。这样,在将客户端重定向到需要SNI的域之前,您将知道客户端支持SNI。

从我的角度来看,如何在Apache上进行精确配置(由于我从未为Apache配置过多个证书)。我猜想这样做的方法是为包括中间域在内的所有域创建基于名称的虚拟主机。

然后为没有SNI的客户端创建默认的虚拟主机,该主机使用与使用名称的证书相同的证书。这两个具有相同证书的虚拟主机将根据客户端是否支持SNI发送不同的重定向到客户端。

最后,我将在服务器上启用IPv6。使用IPv6,您可以获得足够的IP地址,可以为每个虚拟主机分配一个IP地址。同一组虚拟主机可以是基于IPv4的名称,也可以是基于IPv6的IP,因此您不必以这种方式重复任何配置。

最终结果将是只要客户端支持SNI或IPv6都可以使用的设置。只有不支持这两种方法的客户端才会有问题,但是您仍然可以检测到这些问题,并为服务器提供其他重定向或错误消息。

对于不喜欢CA的客户,我唯一的建议是通过其用户代理识别它们并按照您认为合适的方式处理它们。确保您确实有一个指向https站点的链接,如果您错误地包含了太多的客户端,他们可以单击该站点。


0

只是一个疯狂的猜测:难道是您的apache配置中没有SSLCertificateChainFile指令,其中包括StartSSL所需的sub.class1.server.ca.pem文件?


不,一切正常,但是某些旧的浏览器不支持SNI或不信任StartSSL.com。问题在于,这些访问者无法在不忽略证书警告的情况下查看页面(没有解决方案)。
foxylion
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.