我在一台Apache服务器上托pipe了几个独立的网站:
site.com example.com
site.com将所有用户从应用程序中redirect到HTTPS。
example.com是一个非HTTPS网站,HTTPS请求被redirect到HTTP
为了意外的请求https://example.com而不是http://example.com不要获取site.com(由于当只有一个HTTPS虚拟主机被使用,成为默认站点),我需要设置一个https vhost的example.com,但我必须使用自签名的证书,因为没有理由使用SSL的网站。
这意味着当有人访问https://example.com时,他们会得到一个浏览器警告页面,SSL是自签名的,然后只要点击继续,他们就会被redirect到HTTP
有没有办法将HTTPS请求redirect到没有证书的HTTP
这是目前的虚拟主机:
<VirtualHost *:443> ServerName about.example.com:443 DocumentRoot "/webdata" <Directory "/webdata"> AllowOverride All Require all granted </Directory> RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /etc/httpd/ssl/ExampleCOM.crt SSLCertificateKeyFile /etc/httpd/ssl/AboutExampleCOM.key BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 </VirtualHost>
从根本上说,这是一个问题。 在通过HTTPS进行通信时,TLS通信层在交换任何内容之前设置,即关于证书的警告发生在有关该网站的任何信息被传送之前。 所以需要一个证书来允许浏览器在https被定义,自签名或者没有被签名时连接。
理想情况下,对于“最佳实践”,我们真的应该鼓励人们使用HTTPS作为默认设置(我认识到这是一种开销,可能会带来证书的烦扰,而自签名证书不应该有任何问题,问题和浏览器消息等)。
即使您的应用程序服务器“只能执行http”,最佳做法通常是将应用程序服务器与Web服务器(如nginx或lighthttpd或某种形式的负载平衡器)一起提供您的https终止。 – 这是你似乎已经完成您的httprewrite将请求转发到您的网站。
您可能会发现一些便宜的SSL证书提供程序,但它们已安装在大多数浏览器中?
简短的回答。 不, 没有办法做到这一点。
到https的连接发生在任何类型的重定向发生之前。 你唯一能做的就是买一个证书。 这些日常的域名证书是非常便宜的。
你可以得到一个有效的域名证书为$ 4.99 /年 。 然后做重定向,以便https和http都被覆盖。
或者你可以关闭你的443虚拟主机,但是用户会得到一个404或连接错误页面。 如果他们尝试https。
那些是你的选择。 只要用户自行签名,并且按照设计,用户将始终可以看到该警告页面 。