ヘッダー画像

安全な通信がしたい!WEBのセキュリティ設定、HSTSとは?

投稿 2022年2月14日 最終更新 2022年2月14日 専門用語少なめ

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ですら危険になる時代が来るのも時間の問題かもしれません。

以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント

テストコメント