将某些访问者重定向到https(SNI浏览器和系统时间正常)

问题描述:

我发现很多关于检查SNI浏览器支持部分的帖子,但没有与系统时间相结合。将某些访问者重定向到https(SNI浏览器和系统时间正常)

我的网站的默认登陆是http。现在我已经设置了SSL。但兼容性对我来说最重要。安全性最不重要。我只想自动将用户重定向到https,如果我确信他们不会看到错误(然后错误地认为我的网站已损坏)。

由于登陆页面是HTTP,我们可以使用php或.htacess来检测。我曾在别处讨论过使用可能导致一些“后退”按钮问题的php重定向。 (Force SSL and handle browsers without SNI support

除了SNI支持,我也知道如果用户的系统时间配置错误,他可能会在https站点上遇到错误。

那么实现SNI +系统时间检查的最佳方法是什么?用户重定向到https的任何其他可能的情况可能会遇到错误?

============================================== =======================

更新:

加载主页并不真正需要的 “安全”。我在考虑是否可以快速检查用户是否可以成功加载对象,例如https://example.com/test.ico,如果是,则显示“安全登录”选项。 (荣誉Steffen)。然后,该操作将在https中完成,以防止证书被不安全地提交。

如果https测试失败,则用户不必选择不通过https登录。

  1. 这工作?
  2. 额外的测试肯定是在网站加载速度的拖累不是它

这不是你正在寻找的答案,要离开作为该原因发表评论,但一定要长,所以决定回答:

尽管试图处理所有的用户是令人钦佩的,不管他们有什么过时的技术或设置不当,在某些时候,你必须问自己关于你正在投入的努力与奖励一些额外的点击?

管理双重http和https是一种管理噩梦,由于降级攻击,无法使cookie安全,意外地包含不安全的内容,您的https支持用户(几乎所有站点上的绝大多数用户)等等。从SEO的角度来看,你基本上有两个难以管理的网站。

恕我直言,如果您对SNI用户有强烈的感受,那么就付费购买专用IP,否则只能使用HTTPS。

兼容性对我来说是最重要的。安全性最不重要

然后坚持HTTP,甚至不考虑HTTPS。

最后你必须记住,浏览器会迫使你尽快移动。例如,强制使用SHA-2证书(旧版浏览器不支持 - 类似于SNI)意味着您最终必须在旧版浏览器上每天打电话给它。所以你在这里提出的任何答案都只是短暂的。这就是假设你可以想出一个适用于所有浏览器的解决方案(本身没有小问题!)。

无法在服务器端使用PHP或.htaccess检测到这一点,因为如果由于缺少SNI或系统时间错误而导致连接失败,那么它在SSL握手期间就会失败。但是PHP部分或.htaccess仅用于HTTP部分,即仅当SSL握手成功完成时才使用。

您可能会尝试做的是将https资源包含到着陆页中,看看是否成功加载。这可以通过图像,CSS,XHR或类似的方法来完成。例如,如果得到了建立SSL连接到您的网站成功onload处理被执行,用户被重定向到HTTPS的网站,你可以做到这一点

<img src="https://test-ssl.example.com" 
    onload="redirect_to_https();" 
    onerror="notify_user_about_problem();" /> 

。如果握手失败,用户会收到关于该问题的通知。

请注意,您不能通过这种方式区分不同类型的错误,即您不知道问题是由系统时间错误还是缺少SNI支持引起的。如果你想这样做,你需要以相同的方式包含一个非SNI资源,看看它是否成功加载。

但兼容性对我来说最重要。安全性最不重要。

我认为这是一个糟糕的,但不幸的是非常普遍的做法。我建议你使用这种机制,不允许用户只通过http访问你网站的所有功能,但敏感部分应限制为https。但是,您可以使用此方法详细通知用户有关该问题并显示替代方法,而不是由于SSL握手失败而导致一些奇怪的连接错误。