当前位置: 首页 > 面试题库 >

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

轩辕鸿祯
2023-03-14
问题内容

首先,我想说这不是一个好习惯,我们应该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证书提供程序已安装在大多数浏览器中?



 类似资料:
  • 它是使用.NET 4.7.2生成的,类似于本问题中的答案:使用纯.NET Framework生成和签名证书请求 然后将序列化的CSR发送到服务器,服务器需要创建证书--问题是如何做到这一点。

  • 问题内容: 我有一台具有通过https运行的rest API的服务器。我想在我的应用程序中调用此rest api,该应用程序在不同的端口中运行,但是由于这是通过https进行的,因此 我有2个文件pulic_key.pem和private_key可用于验证证书。使用golang发送休假请求时如何验证证书?我正在发送休息请求。这就是我现在忽略证书的操作。 问题答案: 您需要将证书的CA添加到传输中,

  • 说我想得到以编程方式。目前是戈朗。org(ssl)有一个颁发给所以当我运行此命令时: 我得到了(如我所料) 现在,我想自己信任这个证书(想象一个自我颁发的证书,我可以验证指纹等):我如何发出请求并验证/信任证书? 我可能需要使用openssl下载证书,将其加载到我的文件中,并填写结构!?

  • 我需要将数据发布到REST接口,但是接收主机使用的是自签名证书(这一点不会改变),因此我需要忽略我收到的明显的证书验证错误。 我的初始脚本如下所示: 如前所述,这将生成以下StackTrace: 回溯(最近一次调用):文件“send_data.py”,第15行,在urlopen(post_it_早已,context=ctx)文件“c:\users\myusername\appdata\local\

  • 当我们使用AWS应用型负载均衡将传入请求重定向到我们的服务器时,我们创建了一个SSL证书并将其设置为负载均衡器。它同时监听HTTP 80和HTTPS 443端口的流量。在这两种情况下,流量都被重定向到目标组实例的HTTP 80端口。 在这些情况下,有nginx服务器配置为侦听它们所在的实例的HTTP 80端口。 当我更新nginx.conf文件以将传入的HTTP请求重定向到HTTPS协议时,我们面

  • 问题内容: 说我想以编程方式获取。目前,golang.org(ssl)的证书不正确,因此我将其签发给So: 我得到了(如我所料) 现在,我想自己信任该证书(想象一个可以颁发指纹的自我发行的证书,等等):如何提出请求并验证/信任该证书? 我可能需要使用openssl下载证书,将其加载到我的文件中并填充struct!?。 问题答案: 安全说明:禁用安全检查是危险的,应避免 您可以全局禁用默认客户端的所