首先,我想说这不是一个好习惯,我们应该100%地努力使所有内容都使用HTTPS,但是在这种情况下,我对不包含敏感信息的系统提出了一系列尴尬的要求。当我还是个初中生时问这个问题时,我不知道HTTPS / TLS是如何工作的,但由于它引起了很多关注,所以将其留在原地以帮助其他人。如果您有兴趣,我建议阅读Oreily的TLS 101。 现在,您可以使用我彻底推荐的加密算法“ Let’s Encrypt”获得免费的TLS证书。最后,如果您使用默认的Apache配置,请在输入apache版本后检查Mozilla的SSL配置生成器,并选择“现代”。
我在一台apache服务器上托管了几个单独的网站:
**site.com**
site.com将所有用户从应用程序内重定向到HTTPS。
**example.com**
example.com是一个HTTP网站,HTTPS请求被重定向到HTTP
为了意外请求https://example.com而不是http://example.com而不获得site.com(由于仅使用一个HTTPS虚拟主机作为默认站点),我需要设置一个https vhost例如example.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)
从根本上讲,这是一个问题。通过HTTPS进行通信时,在交换任何内容之前即已建立TLS通信层,即,有关证书的警告发生在有关网站的任何信息被传输之前。因此,需要使用证书来允许浏览器在定义了https(无论是否具有自签名)后进行连接。
理想情况下,对于“最佳实践”,我们应该真正鼓励人们使用HTTPS作为默认值(我意识到这是一种支出,并且可能使证书令人烦恼,尽管自签名证书应该没有任何问题,但通常问题和浏览器消息等)。
即使您有一个“只能执行http”的应用程序服务器,最佳实践通常是在该应用程序服务器前面放置一个Web服务器(例如nginx或lighthttpd或某种形式的负载均衡器),该服务器也将提供https终止。-这似乎是您用httprewrite完成的,它将请求转发到您的站点。
您可能会发现一些便宜的SSL证书提供程序已安装在大多数浏览器中?