web-dev-qa-db-ja.com

HTTPSリクエストを証明書なしでHTTPにリダイレクトし(Apache VirtualHosts)、証明書の警告を回避する方法

最初に言いたいのは、これは良い習慣ではなく、すべてをHTTPSで100%使用するように努力する必要があるということですが、この場合、機密情報を保持しないシステムで一連の厄介な要件がありました。私が後輩のときにこの質問をしたとき、HTTPS/TLSがどのように機能するかについてはまったく知りませんでしたが、かなりの注目を集めているため、他の人を助けるためにそのままにしておきました。 興味があれば、OreilyのTLS 101を読むことをお勧めします。 これで、 Let's Encrypt を使用して無料のTLS証明書を取得できるようになりました。最後に、デフォルトのApache構成を使用している場合は、チェックアウトしてください MozillaのSSL構成ジェネレーター Apacheバージョンを入力した後、「Modern」を選択してください。

私は1つのApacheサーバーでいくつかの別々のWebサイトをホストしています。

site.com

site.comは、アプリケーション内からすべてのユーザーをHTTPSにリダイレクトします。

example.com

example.comはHTTPWebサイトであり、HTTPSリクエストはHTTPへのリダイレクトです


http://example.com の代わりに https://example.com を誤ってリクエストするために、site.comを取得しないようにします(HTTPSvhostが1つしかないため)デフォルトのサイトになるが使用されます)example.comのhttps vhostを設定する必要がありますが、サイトで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)
8
ZZ9

基本的に、それは問題です。 HTTPSを介して通信する場合、TLS通信レイヤーは、何かが交換される前にセットアップされます。つまり、証明書に関する警告は、Webサイトに関する情報が転送される前に発生します。したがって、httpsが定義されているかどうかにかかわらず、ブラウザが接続できるようにするには、証明書が必要です。

理想的には、「ベストプラクティス」のために、デフォルトとしてHTTPSを使用するように人々に奨励する必要があります(これは費用がかかり、証明書に煩わされる可能性がありますが、自己署名証明書に問題はないはずです) 、問題やブラウザメッセージなどがよくあります)

'httpしか実行できない'アプリケーションサーバーがある場合でも、ベストプラクティスは、通常、そのアプリケーションサーバーの前にWebサーバー(nginx、lighttpd、または何らかの形式のロードバランサーなど)を配置することです。これにより、httpsターミネーションも提供されます。 -これは、リクエストをサイトに転送するhttprewriteで行ったようです。

しかし、ほとんどのブラウザにインストールされている安価なSSL証明書プロバイダーを見つけるかもしれません。

10
Jmons

短い答え。いいえないこれを行う方法はありません。

Httpsへの接続はbeforeに発生します。あらゆるタイプのリダイレクトが発生します。あなたができる唯一のことは、証明書を購入することです。最近の通常のドメイン証明書は非常に安価です。

$ 4.99 /年の有効なドメイン証明書を取得できます。次に、httpsとhttpの両方がカバーされるようにリダイレクトを実行します。

または、443仮想ホストをオフにすることもできますが、ユーザーには404または接続エラーページが表示されます。彼らがhttpsを試してみれば。

それらはあなたのオプションです。自己署名であり、それが仕様によるものである限り、ユーザーは常にその警告ページを取得します。

5
Panama Jack