安全な通信がしたい!WEBのセキュリティ設定、HSTSとは?
HSTSとは?
HSTS(HTTP Strict Transport Security)と、かたくるしく言われてもわかりにくいので
簡単に言うと、通信するときに安全な通信してくださいね
という指示をしてくれる仕組みです。
ちなみにその安全な通信というのがhttpsと呼ばれています。
もし安全でない通信(http)でアクセスされた場合は、安全な通信(https)へ自動的に飛ばしてくれます。
httpとhttpsの違いは?
httpとは通信内容を暗号化せず、そのままのデータで通信を行うので、
通信内容を他の誰かが勝手に変更できたり、他の誰かがどんな通信をしているかを簡単に見られたりします。
それと対になるのがhttpsです。
httpsでは通信内容を暗号化して、中身を保護して通信を行います。
今現在ではhttpsで通信を行うことが当たり前になりつつあります。
httpsでないと警告が出るようになったりしていますからね。
ちなみにhttpsが安全安全言ってますが、あくまでhttpと比べて安全なだけで、
この世に100%安全だと言えるものはないでしょう・・・。
仕組み
初めて通信を行う際にhttpレスポンスヘッダという、サーバ側から返却される情報の中に
このHSTSという情報が返却されてきます。
その情報をユーザ(利用者)側のブラウザが受け取ります。
そしたら、ブラウザが
「このURLはhttpsで通信しないといけないんだ」
というルールを記憶してくれます。
そのルールを記憶する時間は、HSTSに設定されている時間分、ブラウザ側で記憶してくれます。
その期間を過ぎればブラウザは自動的にルールを消すようになっています。
ただしここで注意していただきたいのは、初回アクセスのとき、
つまり初めて通信を行ったときです。
先ほどの説明通り、初回アクセス時には、ブラウザに「このURLはhttpsに飛ばす」
というルールが記憶されますが、その記憶した瞬間の通信は、ただルールを記憶しただけで、まだそのルールを実行はしません。
なので、初回アクセスをhttpでやってしまうと、その最初のアクセスだけhttpで通信してしまいます・・・。
※実は初回アクセス時にもhttps通信を強制させる仕組みも用意されていますが、それに関しては下で詳しく説明しています。
設定場所
このHSTSがどこにあるかというと、WEBサーバ等のサーバ側にある設定のことで、
ユーザ(利用者)側が何かをするとかいうものではありません。
サーバを管理している方だったり開発者がセキュリティ対策として、
設定を施しているおかげでhttps通信が確立できるといったものです。
設定場所でいうと、サーバによって変わりますが、基本的にはWEBサーバの設定ファイルに書きます。
設定項目
HSTSには設定できる項目が3種類あります。
ブラウザに記憶する期限(必須)
max-age=31536000
のように「max-age」の値に秒単位で指定します
例のようだと、31536000秒=525600分=8760時間=365日、記憶するということになります。
サブドメインへの適用有無(省略可)
includeSubDomains
のように、値を入れるか入れないかでサブドメインにもHSTSの設定をするかどうかの設定をします。
サブドメインとは、例えば○○○.comだとすると、□□□.○○○.comなどがサブドメインになります。
もともとのドメインの前に何かを追加したドメインのことです。
プリロード機能有無(省略可)
preload
のように、値を入れるか入れないかでプリロードを行うかを設定します。
こちらがさきほどあった、初回アクセス時にhttps通信を強制させる仕組みで、
この設定を入れて、さらにあらかじめHSTSプリロードに登録しておけば
対応ブラウザのみですが、初回アクセス時にでもhttpsへ飛ばしてくれる機能です。
ただし制約として、必ずincludeSubDomainsを指定し、期間も1年以上を指定していなければなりません。
すべて設定した値
すべて設定するとこのようになります。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
省略可能なものはなくてもかまいません。
設定方法
サーバによって、書き方はかわりますが、
Apacheだとhttpd.confにこう書きます。
Header add Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
まとめ
HSTSとは、安全な通信を強制させるセキュリティ設定でした。
今後はもうhttpsが当たり前になるでしょうし、
むしろhttpsですら危険になる時代が来るのも時間の問題かもしれません。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。