【问题标题】:How to redirect HTTPS requests to HTTP without a certificate (Apache VirtualHosts) and avoid a certificate warning如何将 HTTPS 请求重定向到没有证书的 HTTP (Apache VirtualHosts) 并避免证书警告
【发布时间】:2015-11-15 13:39:39
【问题描述】:

我首先要说的是,这不是一个好的做法,我们应该努力让所有东西都 100% 使用 HTTPS,但在这种情况下,我对一个不包含敏感信息的系统有一系列尴尬的要求.当我更年轻的时候问这个问题时,我完全不知道 HTTPS/TLS 是如何工作的,但是因为它受到了相当多的关注,所以我把它留在原地帮助其他人。 I recommend reading Oreily's TLS 101 if you're interested. 您现在可以使用我强烈推荐的Let's Encrypt 获得免费的 TLS 证书。最后,如果您使用的是默认的 Apache 配置,请在输入您的 apache 版本后查看Mozilla's SSL config generator 选择“现代”。

我在一个 apache 服务器上托管了几个单独的网站:

site.com

site.com 将所有用户从应用程序内重定向到 HTTPS。

example.com

example.com 是一个 HTTP 网站,HTTPS 请求被重定向到 HTTP


为了不让https://example.com 而不是http://example.com 的意外请求无法获取site.com(由于仅使用一个成为默认站点的HTTPS 虚拟主机),例如,我需要设置一个https 虚拟主机。 com 但我必须使用自签名证书,因为该站点没有理由使用 SSL。

这意味着当有人访问 https://example.com 时,他们会看到一个浏览器警告页面,表明 SSL 是自签名的,然后一旦他们点击继续,他们就会被重定向到 HTTP

有什么方法可以在没有证书的情况下将 HTTPS 请求重定向到 HTTP

这是当前的虚拟主机:

<VirtualHost *:443>
        ServerName about.example.com:443

        DocumentRoot "/directory"
        <Directory "/directoy">
                AllowOverride All
                Require all granted
        </Directory>

        RewriteEngine On
        RewriteCond %{HTTPS} on
        RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

        SSLEngine on
        SSLCertificateFile /etc/httpd/ssl/ExampleCOM.pem
        SSLCertificateKeyFile /etc/httpd/ssl/AboutExampleCOM-key.pem
        Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 
SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder     on

# Disabled to avoid CRIME attack
SSLCompression          off

# this usually compromises perfect forward secrecy
SSLSessionTickets       off

# OCSP Stapling, httpd 2.3.3 or later
SSLUseStapling          on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)

【问题讨论】:

    标签: linux apache ssl https centos


    【解决方案1】:

    从根本上说,这是一个问题。当通过 HTTPS 进行通信时,TLS 通信层会在交换任何内容之前设置,即有关证书的警告发生在传输有关网站的任何信息之前。因此,需要一个证书来允许浏览器在定义 https 时进行连接,无论是否自签名。

    理想情况下,为了“最佳实践”,我们真的应该鼓励人们默认使用 HTTPS(我意识到这是一笔费用,并且可能对证书感到恼火,虽然 self 不应该有任何问题签名证书,通常会出现问题和浏览器消息等)。

    即使您有一个“只能执行 http”的应用程序服务器,最佳实践通常是在该应用程序服务器前面安装一个 Web 服务器(例如 nginx 或 lighthttpd 或某种形式的负载平衡器),这也将提供您的 https终止。 - 这就是你似乎对你的 httprewrite 所做的,它将请求转发到你的网站。

    您可能会发现一些廉价的 SSL 证书提供程序安装在大多数浏览器中?

    【讨论】:

    • 感谢您的回答
    • LetsEncrypt 是获取 SSL/TLS 证书的免费服务:letsencrypt.org
    【解决方案2】:

    简短的回答。不,没有没有方法可以做到这一点。

    到 https 的连接发生在之前任何类型的重定向发生。您唯一能做的就是购买证书。如今,常规域证书非常便宜。

    您可以以 $4.99/yr 的价格获得有效的域证书。然后进行重定向,以便同时覆盖 https 和 http。

    或者您可以关闭您的 443 虚拟主机,但用户会看到 404 或连接错误页面。如果他们尝试 https。

    这些是您的选择。只要它是自签名的并且这是设计使然,您的用户将始终获得该警告页面

    【讨论】:

    • 感谢您的回答
    • 目前您可以从以色列 CA 免费获得证书。
    猜你喜欢
    • 2016-01-15
    • 2023-03-07
    • 2016-04-15
    • 2018-07-01
    • 1970-01-01
    • 2012-01-09
    • 2018-02-04
    • 2011-09-13
    • 2015-04-06
    相关资源
    最近更新 更多