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

投稿 2022年2月14日

更新 2022年2月14日

専門用語の数:

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

~ 目次 ~

HSTSとは?

httpとhttpsの違いは?

仕組み

設定場所

設定項目

設定方法

まとめ

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


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

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

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)