最初に言いたいのは、これは良い習慣ではなく、すべてを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)
基本的に、それは問題です。 HTTPSを介して通信する場合、TLS通信レイヤーは、何かが交換される前にセットアップされます。つまり、証明書に関する警告は、Webサイトに関する情報が転送される前に発生します。したがって、httpsが定義されているかどうかにかかわらず、ブラウザが接続できるようにするには、証明書が必要です。
理想的には、「ベストプラクティス」のために、デフォルトとしてHTTPSを使用するように人々に奨励する必要があります(これは費用がかかり、証明書に煩わされる可能性がありますが、自己署名証明書に問題はないはずです) 、問題やブラウザメッセージなどがよくあります)
'httpしか実行できない'アプリケーションサーバーがある場合でも、ベストプラクティスは、通常、そのアプリケーションサーバーの前にWebサーバー(nginx、lighttpd、または何らかの形式のロードバランサーなど)を配置することです。これにより、httpsターミネーションも提供されます。 -これは、リクエストをサイトに転送するhttprewriteで行ったようです。
しかし、ほとんどのブラウザにインストールされている安価なSSL証明書プロバイダーを見つけるかもしれません。
短い答え。いいえないこれを行う方法はありません。
Httpsへの接続はbeforeに発生します。あらゆるタイプのリダイレクトが発生します。あなたができる唯一のことは、証明書を購入することです。最近の通常のドメイン証明書は非常に安価です。
$ 4.99 /年の有効なドメイン証明書を取得できます。次に、httpsとhttpの両方がカバーされるようにリダイレクトを実行します。
または、443仮想ホストをオフにすることもできますが、ユーザーには404または接続エラーページが表示されます。彼らがhttpsを試してみれば。
それらはあなたのオプションです。自己署名であり、それが仕様によるものである限り、ユーザーは常にその警告ページを取得します。