2012-07-24 3 views
8

HTTPSとwwwを強制するリライトルールがあります。 SSL証明書は、サイトのwwwバージョン用です。サイト全体がHTTPSである必要があります。.htaccessリダイレクトは、ブラウザの警告後にのみ実行されます。

要求がhttps://example.com/の場合、ブラウザはリダイレクトを実行する前に警告ページを表示します。 (Firefoxでは 'この接続は信頼できません'、Chromeでは 'これはおそらくあなたが探しているサイトではありません!')

ユーザがFirefoxで例外を追加した場合やChromeのエラーを無視した場合、 100%の安全なページを持つサイトのwwwバージョンにリダイレクトされます。

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^example.com$ [OR] 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^www.example.com$ 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

私は、リダイレクトは、ブラウザの警告の前に実行するために取得できますかhttp://martinmelin.se/rewrite-rule-tester/

上だけでなく、サイト上のルールをテストしてきましたか?

+0

参照:http://serverfault.com/a/360985/47187 – Bruno

+0

[httpsからnon-wwwへのリダイレクトとhttpからwwwへのリダイレクト](http://stackoverflow.com/a/10726167/372643)。 – Bruno

+0

この質問は重複する可能性がありますが、私はここの問題が少し明確になったと思います、IMHO。 – Jonathan

答えて

8

https://example.comからhttps://www.example.comへのリダイレクトは、クライアントが最初に成功した要求をhttps://example.comにした後にのみ発生します。

これは、HTTPSがTLS/SSL over HTTP(RFC 2818参照)であり、HTTPトラフィックが送信される前にSSL/TLS接続を最初に確立するためです。 mod_rewriteは、SSL/TLS接続が確立された後は常に適用されます。攻撃者は証明書が検証される前にクライアントを書き換えてリダイレクトする可能性があるため、実際にはセキュリティ上の問題になります。 TLSのアップグレードがHTTP(RFC 2817、実質的に使用/サポートされず、httpsではない)内であったとしても、依然としてリダイレクトが信頼できるエンティティからのものであることが必要です。

https://example.comのサーバーでは、この初期接続を有効にする証明書がexample.comである必要があります。そうしないと、この接続は行われません(サーバーはリダイレクト応答を送信しません)。あなたの目標を達成するために

、あなたはexample.comwww.example.comのための有効な証明書を提示するhttps://www.example.comの要求のための有効な証明書を提示するhttps://example.comの要求を必要とします。

2つの解決策があります。個別のIPアドレスを使用するか、サーバ名の表示のいずれかを使用して、各ホストのための2つの異なる証明書を使用して

  • が。ここでの欠点は、SNIがより一般的になっても、すべてのクライアントがSNIをサポートしているとは限りません。
  • example.comwww.example.comの両方に有効な1つの証明書を使用する。これは、複数のサブジェクト別名(SAN)DNSエントリを持つ証明書を取得することで実現できます(ドットはワイルドカードパターンの一部ではないため、*.example.comでは機能しません)。

後者は確かに最も簡単な解決策です。 CAは、追加料金なしで、どちらか一方を申請するときにexample.comwww.example.comのSANエントリを持つ証明書を発行するのが一般的です。

+0

注:ほとんどのワイルドカード証明書には、「* .example.com」と「example.com」の両方が含まれています。 – cmorrissey

0

This postアドレスあなたの問題、および以下の答えを提供します。あなたは無効な証明書の問題を回避したい場合は

あなたはexample.comの証明書が必要になります。セキュリティ上の理由から、認証前のリダイレクトは許可されていません。

もう1つの方法は、ワイルドカード証明書を取得することです。 *.example.comと一致させることができます。 (どうやらこれは動作しません。おかげで@Giel)を

あなたはhttps://www.example.com/http://example.com/リダイレクトを作ることができますが、あなたはすでにhttps://example.com/を訪問するユーザーがいる場合、それはあなたを助けるかもしれません。

+0

ワイルドカードの証明書では不十分ですが、example.comと* .example.comの両方が前者と一致しないため、そこには両方とも必要です。 – Giel

関連する問題