如何在没有证书的情况下将HTTPS请求重定向到HTTP(Apache VirtualHosts)并避免出现证书警告

Air*_*bat 8 linux apache ssl https centos

首先,我想先说,这是不好的做法,我们应该endevour会对HTTPS一切时间的100%,但在这种情况下,我有一系列未持有敏感信息的系统上尴尬的要求.我很无知的HTTPS/TLS问这个问题的时候回来时,我还是比较初级的工作原理,但它留在地方,以帮助别人为它接收的关注相当数量.如果您有兴趣,我建议您阅读Oreily的TLS 101. 您现在可以使用我强烈推荐的Let's Encrypt获得免费的TLS证书.最后,如果您使用的是默认的Apache配置,请在输入您的apache版本后查看Mozilla的SSL配置生成器,选择"Modern".

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

site.com

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

example.com

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


为了让意外请求https://example.com,而不是http://example.com拿不到site.com我需要建立一个(由于只有一个HTTPS虚拟主机使用的是成为默认网站) https vhost for example.com但我必须使用自签名证书,因为该站点没有理由使用SSL.

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

有没有办法在没有证书的情况下将HTTPS请求重定向到HTTP

这是当前的vhost:

<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)
Run Code Online (Sandbox Code Playgroud)

Jmo*_*ons 10

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

理想情况下,对于"最佳实践",我们应该鼓励人们使用HTTPS作为默认值(我意识到这是一项费用,并且可能会对证书感到烦恼,虽然自签名证书不应该有任何问题,但通常情况下,问题和浏览器消息等).

即使您有一个"只能执行http"的应用程序服务器,最佳做法通常是使用Web服务器(例如nginx或lighthttpd或某种形式的负载均衡器)来应用服务器,这也将提供您的https终止. - 您似乎已经使用httprewrite将请求转发到您的网站.

您可能会找到一些安装在大多数浏览器中的廉价SSL证书提供商吗?

  • LetsEncrypt是获取SSL/TLS证书的免费服务:https://letsencrypt.org/ (2认同)

Pan*_*ack 5

简短的回答.没有有没有办法做到这一点.

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

您可以以4.99美元/年的价格获得有效的域名证书.然后执行重定向,以便覆盖https和http.

或者您可以关闭443 vhost,但用户将收到404或连接错误页面.如果他们尝试https.

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