Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将HTTPS请求重定向到没有证书的HTTP(Apache VirtualHosts)并避免证书警告_Linux_Apache_Ssl_Https_Centos - Fatal编程技术网

Linux 如何将HTTPS请求重定向到没有证书的HTTP(Apache VirtualHosts)并避免证书警告

Linux 如何将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

首先,我想说的是,这不是一个好的做法,我们应该在100%的时间里都使用HTTPS,但在这种情况下,我对一个不包含敏感信息的系统提出了一系列棘手的要求。当我年幼时问这个问题时,我对HTTPS/TLS是如何工作的一无所知,但由于它受到了相当多的关注,我将它留在原地以帮助他人。 您现在可以获得免费的TLS证书,我完全推荐您使用它。最后,如果您使用默认的Apache配置,请在输入Apache版本后选择“Modern”

我在一台apache服务器上托管了两个不同的网站:

site.com

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

example.com

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


为了避免意外请求而不是不获取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证书的免费服务: