2017-05-01 17 views
1

私は(SSLの証明書は、後にのみ有効であるため)https://www.example.comからhttps://example.comにユーザーをリダイレクトしようとしている、これは、このコードでChromeで素晴らしい作品:FirefoxはHTTPからHTTPSへ正しくリダイレ​​クトされませんか?

if(isset($_SERVER['HTTPS']) and $_SERVER['SERVER_PORT'] == 443){ 
    // We are on https version 
    if(strtolower($_SERVER['SERVER_NAME']) == 'www.example.com'){ 
     // Wrong domain: Redirect to safety 
     header('Location: https://example.com/', true, 301); 
     exit(); 
    }else{ 
     // We are safe 
     die('SSL certificate OK: Your credit card is now safe'); 
    } 

}else{ 
    // Redirect to safety 
    header('Location: https://example.com/', true, 301); 
    exit(); 
} 

しかし、Firefoxのをすることを拒否リダイレクトして、通常のメッセージを表示し続ける不快なサイト:このページを今すぐ退去するか、クレジットカードが盗まれるなど警告が表示されます。このFirefoxを強制的にリダイレクトしてから、Chromeが既に行っているようにSSL証明書を確認する回避策がありますか?

注:IISを使用していないので、$_SERVER['HTTPS']の値を確認する必要はありません。それはそのまま動作します。

答えて

1

不正なcertifcateエラーが発生し続ける理由は、HTTPSがどのように機能するかに起因します。つまり、HTTP接続はTLSでトンネリングされます。これは、リダイレクトが行われるHTTPレイヤーに到達する前に、クライアントがWebサーバーへのTLS接続(サーバー証明書を検証するプロセスを含む)を開始することを意味します。その結果、Webサーバーが応答する前にFirefoxが証明書を突き詰めたため、ブラウザはリダイレクトを認識しません。

TLSハンドシェイクを完了する前にHostヘッダーを処理する方法があります。通常はSNIが含まれますが、それでもサーバーからの有効な証明書が必要です。

しかし、 "www"接頭辞にも有効なドメインの証明書を使用している場合はどうすればいいですか? example.comおよびwww.example.com。ほとんどの認証局は、証明書要求に両方のドメインを指定している限り、追加料金なしで発行するSSL証明書に対してこの機能を提供します。 (これに関する詳細が必要な場合は、私に教えてください)

のプロトコルによって、証明書のチェックをバイパスすることはできません。これは意図的な動作です。 this answerも参照してください。

+0

ありがとうございます。ありがとうございました。それ以外の場合は、サイトで今後質問することができなくなりますので、質問に投票してください。 – andreszs

関連する問題