ウェブサイト脆弱性:HTTPSリダイレクトの設定方法と必要な理由
2023年5月31日
HTTPSは現代のウェブサイトにおいて必須事項とも言えるセキュリティ対策です。しかしHTTPSリダイレクトの設定が正しく設定されていないと、HTTPでサイトにアクセスすることができてしまい、HTTPSの意味がなくなるという事態を引き起こします。これは平文での通信が行われ、情報漏洩のリスクを高める、という事態に繋がります。以降では、HTTPSリダイレクトを設定しないことの問題点、HSTSとHTTPSリダイレクト相違点、HTTPSリダイレクトの有効化の確認方法、HTTPSリダイレクト設定の具体的な設定方法、を解説していきます。
日本の上場企業3715社の公式サイトのHTTPS対応率 出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード
HTTPSリダイレクトを設定しないと何が問題か
HTTPSリダイレクトが有効になっていない場合、サイトにHTTPでアクセスした場合に強制的にHTTPS接続にリダイレクトがされないということです。これを悪用して、HTTPS対応しているサイトにおいて、HTTP接続を行う事が可能になり、情報漏洩を引き起こすといった攻撃が可能になってしまいます。一言で言えば、HTTPSを形骸化されてしまう、ということです。そのため、HTTPでの接続はHTTPSにリダイレクトする必要があり、HTTPSリダイレクト設定をする必要が出てくるわけです。目的は、平文での送信による情報漏洩を防ぐことにあります。
他のケースでは、ホームページにURLを貼る際に、ユーザーが間違えてhttpsではなくhttpで記載してしまった場合に、そのURL経由でアクセスした他のユーザーは全てhttp通信でアクセスすることになり、平文での通信が意図せず行われる、というシナリオもありえます。公衆Wi-Fiでアクセスされた場合、危険度は格段に上がります(WIFI通信が暗号化されていないためです。中間者攻撃のリスクが高くなります)。こうしたケースも、HTTPSリダイレクトを設定する事で防げます。ユーザーが、URLからsを一文字取るだけでこれだけの危険が起きるのです。こうしたケースで情報漏洩がおきた場合、企業側の責任になりますから、非常にリスクのある問題といえます。
HSTSとの違い
HTTPSリダイレクトは、HTTPでのアクセス即ちポート80へのアクセスを、HTTPS即ちポート443へリダイレクトすることで、HTTPでの訪問もすべてHTTPSに変換する事で、常にHTTPS通信を行い平文でデータが送信されることを防ぐことが目的です。
HSTSもHTTPS通信を常時使用させ、HTTPでの通信が行われる事を防ぐことが目的なのは同じですが、違うのは、HTTP通信を選択肢から除外し、HTTPSだけを許可する設定である事です。言い換えると、HTTPSリダイレクトはHTTPからHTTPSへのリダイレクトを実現し、通信の機密性を確保します。一方、HSTSはウェブサイトへのアクセスをHTTPSに制限し、セキュリティを強化します。HSTSのHTTPSに制限する能力は、Always、Preloadなどのディレクティブを追加するごとに範囲が強化され、Preloadリストに登録した段階で、100%HTTPSのみでしか通信を行えなくなります、即ちHTTPでの通信は一切行えなくなります。
基本的にはHTTPSリダイレクトを設定した上で、さらにこれを強化する目的で、HSTSを設定することで、HTTPS通信のセキュリティ強度を最大化させることができるようになります。
また、HSTSはウェブサイトのセキュリティを強化し、中間者攻撃やSSLストリッピングなどの攻撃から保護するために使用されます。
HTTPSリダイレクトが有効になっているかを確認する方法
HTTPSリダイレクトが自分のサイトで有効になっているかを確認するためには、いくつかの方法があります。
1つ目の方法は、URLのhttpsをhttpに変更してアクセスしたとき、httpsに変わったりせず、そのままhttpのまま変わらずにいるかどうか、という判別方法です。もしhttpのまま変わらない場合、HTTPSリダイレクトが有効になっていません。変わらないということは、httpで通信の応答が完了しているからです。
逆に、httpでアクセスしてもhttpsに勝手に変更されてしまう場合、HTTPSリダイレクトが有効になっています。通信は常に暗号化されています。
2つ目の方法は、Mozilla Observatoryのような脆弱性スキャンツールでサイトをスキャンした際、HTTPSリダイレクトの項目に警告マークが出ているかチェックする方法です。
これらの方法で確認した際に、もしHTTPSリダイレクトが有効になっていない場合は、情報漏洩のリスクがあるということなので、HTTPSリダイレクトをすぐに有効にする必要があります。
HTTPSリダイレクトの設定方法
HTTPでのアクセスをHTTPSにリダイレクトするための方法は、ポート80へのアクセスをポート443にリダイレクトするディレクティブを、ポート80のserverディレクティブに追記するだけです。具体的には以下のような設定を行います。Nginxでの設定を想定しています。
/etc/nginx/nginx.confを開き、port80のserverディレクティブにreturn 301https://$host$request_uri;を追加します。
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; #これを追加
}
設定を反映させるため、Nginxの再起動をします。
sudo systemctl restart nginx
これでHTTPでのアクセス、即ちポート80へのアクセスは、以降全て、HTTPS即ちポート443にリダイレクトされます。言い換えると、HTTPでのアクセスは全てHTTPSに変換されるため、セキュリティが向上します。同時に、リダイレクトを設定していない場合に発生するような、勝手にHTTPで通信される、という事態を防ぐことができます。ユーザーが誤ってURLをHTTPで記載してしまっても、HTTPSにリダイレクトされるので、平文で通信されて情報漏洩が発生することもなくなります。