Linux 如何将HTTPS请求重定向到没有证书的HTTP(Apache VirtualHosts)并避免证书警告
首先,我想说的是,这不是一个好的做法,我们应该在100%的时间里都使用HTTPS,但在这种情况下,我对一个不包含敏感信息的系统提出了一系列棘手的要求。当我年幼时问这个问题时,我对HTTPS/TLS是如何工作的一无所知,但由于它受到了相当多的关注,我将它留在原地以帮助他人。 您现在可以获得免费的TLS证书,我完全推荐您使用它。最后,如果您使用默认的Apache配置,请在输入Apache版本后选择“Modern” 我在一台apache服务器上托管了两个不同的网站: site.com site.com将所有用户从应用程序中重定向到HTTPS example.com example.com是一个HTTP网站,HTTPS请求被重定向到HTTPLinux 如何将HTTPS请求重定向到没有证书的HTTP(Apache VirtualHosts)并避免证书警告,linux,apache,ssl,https,centos,Linux,Apache,Ssl,Https,Centos,首先,我想说的是,这不是一个好的做法,我们应该在100%的时间里都使用HTTPS,但在这种情况下,我对一个不包含敏感信息的系统提出了一系列棘手的要求。当我年幼时问这个问题时,我对HTTPS/TLS是如何工作的一无所知,但由于它受到了相当多的关注,我将它留在原地以帮助他人。 您现在可以获得免费的TLS证书,我完全推荐您使用它。最后,如果您使用默认的Apache配置,请在输入Apache版本后选择“Modern” 我在一台apache服务器上托管了两个不同的网站: site.com site.com
为了避免意外请求而不是不获取site.com(由于仅使用一个HTTPS vhost成为默认站点),我需要为例如.com设置HTTPS vhost,但我必须使用自签名证书,因为站点没有理由使用SSL 这意味着,当有人访问时,他们会收到一个浏览器警告页面,指出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)
ServerName about.example.com:443
DocumentRoot“/目录”
允许超越所有
要求所有授权
重新启动发动机
在上重写cond%{HTTPS}
重写规则(*)http://%{http\u HOST}%{REQUEST\u URI}
斯伦金安
SSLCertificateFile/etc/httpd/ssl/ExampleCOM.pem
SSLCertificateKeyFile/etc/httpd/ssl/AboutExampleCOM-key.pem
标头始终设置严格的传输安全性“最大年龄=15768000”
SSLProtocol all-SSLv2-SSLv3-TLSv1-TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256
SSLHonorCipherOrder开启
#残疾人士避免犯罪袭击
SSL压缩关闭
#这通常会损害完全的前向保密性
SSLSE:退票
#OCSP装订,httpd 2.3.3或更高版本
SSLUS建立在
SSLSTAPL超时5
SSLStaplingReturnResponderErrors关闭
SSLStaplingCache shmcb:/var/run/ocsp(128000)
从根本上说,这是一个问题。当通过HTTPS进行通信时,TLS通信层在交换任何内容之前设置,即关于证书的警告发生在有关网站的任何信息传输之前。因此,无论是否定义了https,浏览器都需要证书才能连接
理想情况下,对于“最佳实践”,我们应该真正鼓励人们使用HTTPS作为默认设置(我意识到这是一项开销,而且证书可能会让人恼火,虽然自签名证书不应该有任何问题,但经常会出现问题和浏览器消息等)
即使您有一个“只能执行http”的应用程序服务器,最佳实践通常是使用Web服务器(如nginx或lighthttpd或某种形式的负载平衡器)前置该应用程序服务器,该服务器也将提供您的https终端。-这就是你用你的httprewrite所做的,它将请求转发到你的站点
您可能会发现一些便宜的SSL证书提供程序,它们安装在大多数浏览器中。简短回答。不,没有一种方法可以做到这一点 与https的连接发生在任何类型的重定向发生之前。你唯一能做的就是买一个证书。现在普通的域名证书非常便宜 您可以以4.99美元/年的价格获得有效的域证书。然后执行重定向,以便覆盖https和http 或者,您可以关闭443 vhost,但用户将获得404或连接错误页面。如果他们尝试https
这些是你的选择。您的用户将始终得到该警告页面,只要它是自签名的,并且是经过设计的 感谢您的回复目前您可以从以色列CA免费获得证书。感谢您的回复Sencrypt是获取SSL/TLS证书的免费服务: