そこに仁義はあるのか(仮)

略してそこ仁!

SSL/TLSを実際に設定しつつ学べる「SSLをはじめよう!」を読んだ

@mochikoAsTechさんに「SSLをはじめよう!」という同人誌をいただきました!元々「SSLは完全マスターすらできてない」という状態で、この本が発売されたら購入しようと思っていたのですごく嬉しい!技術書典8で発売される予定だったのですが、コロナの影響で技術書典自体がなくなってしまいました…。残念…。ただ、オンラインでの購入が可能です!

「はじめに」にも書いてありますが、この書籍はSSLに対して『関わる機会が多い割に「ちゃんとわかっているか」と言われるとちょっと自信がない』と言う人に向けられた書籍です。私じゃん。
全部で100ページ強で操作画面のキャプチャも多く、私はサクサクと2日で読めてしまいました。しかし、その中に、

  • SSL/TLSとは何か
  • どういうメリットが得られるのか
  • HTTPSはどういう流れで処理が行われるのか
  • 実際にHTTPS化をやってみる
    • クラウド環境の準備(Oracle Cloud)
    • Webサーバーの構築
    • SSL証明書の取得
    • SSL証明書の設定

と、内容の密度が高く、SSL/TLSに対する理解をしっかり深められました。
特に私が気に入ったのは、実際にHTTPS化をしていく箇所です。ハンズオンのようにキャプチャが貼られているので迷わずに操作ができるし、手順に「自分が今なんのために何をやっているのか」が丁寧に解説されているので、操作の目的を意識しつつ進んでいけました。
正直、これで1000円はお買い得だと思う…!

📖 目次

  1. SSL/TLSとは?
  2. Oracle Cloudのアカウントを作ろう
  3. サーバを立ててHTTPでサイトを見てみよう
  4. SSL証明書を取ってHTTPSでサイトを見よう
  5. SSL/TLSの仕組み

HTTPS化すると得られるメリット

HTTPのままだと起こるデメリットとHTTPSにすることのメリットが紹介されています。
その中で特に面白いと思ったのは、HTTP/2による速度向上に関する記載でした。

HTTPS化すると、HTTP/2を利用できる*1ようになり、ページの作りによっては速度が向上するとのこと。

こちらはHTTPとHTTPSの速度比較ができるサイトです。
HTTP vs HTTPS — Test them both yourself
右上のタブでHTTPとHTTPSを切り替えられて、それぞれのプロトコルでのページロードの速度を実際に確認できます。
やってみると、かなりHTTPSの表示が早いのですが、このサイトのように「小さな画像を大量に表示するサイト」はHTTP/2のメリットを受けやすいそうです。

SSL証明書の秘密鍵にパスフレーズは設定すべき?

opensslコマンドで秘密鍵を作成する時に、パスフレーズを設定するべきかどうかのコラムがありました。秘密鍵にパスワードをつけることでどんなメリットとどんなデメリット(運用の手間)があるかという内容を紹介した上で、以下のように記載があります。

利便性を保ちつつ安全性も向上させたければ、本番のウェブサーバで使う秘密鍵はパスフレーズなし、バックアップとして他のサーバで保管しておく秘密鍵はパスフレーズありにしておく、という方法がいいでしょう。

こういう、実際に運用する時はどういう風に判断すれば良いのか、という指標が載っているのも読んでいて楽しかったです。
他にも「ロードバランサーでSSLターミネーションするメリット」が書かれたコラムもあり、そちらも面白く読めました。

Chapter3〜Chapger4 実際にHTTPS化をする

Chapter3〜Chapter4で実際にクラウド環境の構築からHTTPS化までの流れを進めていきます。
100ページの中でSSL/TLSについて学べる上に、クラウドのアカウント登録・Webサーバの構築・HTTPS化という幅広い範囲がカバーされており、とても内容密度が高いです。
クラウドを利用することで環境構築も簡単+素早くできて、実際に手を動かしながらサクサクと試しつつ理解を深めることができました。
実行するコマンドについても意味が説明されていて、「こういう意図のコマンドを実行しているんだ」と理解しつつ進めていきました。

これらのチャプターは自分のドメインを持っていることが前提になるので、「お名前.com」でドメインを取得しました。「.work」のドメインであれば1円で取得できますし、ドメイン取得までの手順も全然難しくないです。ただ、もしドメイン取得の手順に不安がある方は、同じく@mochikoAsTechさんが書かれている「DNSをはじめよう!」を書籍でご案内されていました。

追加で調べたこと

書籍には載っていませんでしたが、追加で調べたことを書きます。

Qualys SSL Server Test

Qualys SSL Server TestはSSLの設定を無料でチェックできるサイトです。URLを入れるだけでサイトのSSL設定のセキュリティ強度を表示します。
https://www.ssllabs.com/ssltest/analyze.html

f:id:syobochim:20200302214803p:plain:w400
NginxのHTTPSの設定に

ssl_protocols TLSv1.2;

を入れるか入れないかで、Protocol Supportの点数が変わったりして面白いです。

HSTS(Hypertext Strict Transport Security)

HTTPSでアクセスしたいサイトにHTTPでアクセスした時、Nginxのconfigにリダイレクトの設定を入れているのに初回のみリダイレクトされませんでした。
これはHSTSの設定ができていないことが原因でした。
HSTSは、WebブラウザにTLSの使用を強制するポリシーメカニズムとのこと。
Strict-Transport-Securityヘッダーに「max-age」「includeSubDomains」「preload」を設定すれば強制的にHTTPSへアクセスさせることができました。

nginxの設定 (HTTPの設定のみ抜粋したdiff)
server {
    listen       80;
    server_name  localhost;
    return 301 https://$host$request_uri;
+     add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

📖 まとめ

本を読む前は「SSLは難しそうで少し怖い」という状態でしたが、概念を理解しつつ実際に手を動かしてHTTPS化の設定をしてみたことで、SSLが怖くなくなりました!
SSLの概念の説明だけでなく、クラウド環境の登録・Webサーバの構築・サイトのHTTPS化という幅広い操作手順も説明されている、密度が高い一冊です。
操作する画面のキャプチャが貼られているのでひとりでも迷わずに進められますし、手順には「どんな目的のためにこの操作をしているのか」が丁寧に解説されており、操作しつつしっかりと理解を深められました。
SSLに対して苦手意識のある方にオススメです!




*1:HTTP/2は、仕様上はHTTPにも対応しているけれど、ブラウザ側がHTTPSでしかHTTP/2を利用できないようになっている。