はむはむエンジニアぶろぐ

365日エンジニアリング

nginxからのレスポンスヘッダにHSTSをつける

HSTSとは、HTTP Strict Transport Securityの略。
これをヘッダにつけておくと、クライアントからのアクセスがhttpではなくhttpsになる。
つまり、サーバ側でhttpをリダイレクトしてhttpsにせずともクライアント側でhttpsにして返してくれる。
サーバのリダイレクト処理処理も減るし、http通信も減るし1石2鳥である。

HSTSとは

HSTSはRFC6797で規定されている。
HSTSヘッダを受け取ると、以後の通信はクライアントの方でhttpsでリクエストするようになる。
ただし、初回アクセス時はhttp通信なので、そこにはセキュリティリスクが残る。
初回アクセスに関しては、HSTS Preloadingという技術で回避することができる。

参考:

HSTS Preloadingとは

HSTS Preloadingを設定しておくと、初回アクセス時からhttpsで通信できる。
HSTS Preloadingを設定後、申請を行うことで有効になる。

HTST Preloadingの申請は こちら

HTST Preloadingに対応できるのは主要なブラウザのみ。(Chrome、Firefox、Opera、Safari、IE 11など)
他にも証明書が必要だったり条件がある。
詳しい条件は、申請を行うサイトに記載されている。

nginxにHTSTの設定をする

ngix.confにHTSTの設定を追加しnginxを再起動かける。

add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload';

HTSTヘッダがついていればOK。

$ curl --head サーバのIPアドレス

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

あとは、HTST Preloadingの申請を行えば初回アクセス時もhttps通信となる。