注目の記事

SSLを基礎から学ぶには最適の入門書「食べる!SSL!- HTTPS環境構築から始めるSSL入門」

2017.10.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

20171025_181218

「良い本に出会った。感動した。」 by濱田

2014年4月のOpenSSLの脆弱性に起因するHeartbleed事件では、世界中のエンジニアが対応に追われました。この記事を読んでいる人で、あの日のことを懐かしく苦しく思い出す方、多いと思います。自分も例外ではないです。

それだけ広く使われていて、インターネット通信における基礎のSSLですが、皆さん、以下の点にすっきり答えられますか?

  • SSLとTLSの違い
  • SSLが保護するレイヤーは?
  • SSHとの違いは?
  • デジタル署名の「署名」の意味とは?
  • 証明書は「誰」が「なに」を「どうやって」「証明」しているのか?

普段、EC2でキーペア発行したり、証明書導入したりしているエンジニアでも、案外、ここらへんがもやもやしている人も多いのではないでしょうか。

ぶっちゃけ、自分がそうでした。

そんな折に手に取ったこの本が、自分のニーズにばっちこーいでヒットしたので、今回ご紹介させていただきます。

最大の特徴は「腹落ち」させること

冒頭に、この本の趣旨が書かれています。

本書のタイトルを敢えて「食べる!」とした意図は、SSLの基本や理論を一度しっかりと噛み砕いて理解して「腹落ち」させることで、SSLを自分の体の一部にしてほしいというものです。

まさに自分が求めていたのが、この「腹落ち」させる、ということです。

新しいことを学習するとき、様々な方法あると思いますが、自分は「実際に手を動かして試してみる」ということを非常に重要視しています。それは、developers.IOの基本理念でもありますし、エンジニアの方なら、皆さんそういう趣向のかたが多いと思います。

この本は、SSLについての基本や理論を学びつつ、最後の章では、実際にHTTPS環境を設計・構築します。其の中で、記憶が不確かな点や、自分で他のやり方を試行錯誤しながら、学ぶことができます。

本書の構成は、以下の通り。

  1. セキュリティの重要性
  2. SSL通信とは
  3. SSL通信の構築準備
  4. 実際にSSL通信(HTTPS環境)を設計・構築してみよう

この後、各章の特徴について、簡単にご紹介していきます。

(重要)第一章「セキュリティの重要性」でセキュリティの基本概念をおさらいする

知っている人には、「今更かよ」という気持ちになるあれですが、最初に、CIAとSTRIDEについて学びます。

  • CIA セキュリティの「考え方」
    • 機密性(Confidentiality)
    • 完全性(Integrity)
    • 可用性(Availability)
  • STRIDE 情報への「攻撃」
    • なりすまし(Spoofing)
    • データの改ざん(Tampering)
    • 否認(Repudiation)
    • 情報漏えい(Information Disclosure)
    • サービス不能(Denial of Service)
    • 権限の昇格(Elevation of Privilege)

改めてじっくり読んでみたのですが、全体を理解する上で非常にメリットがありました。

個々の技術要素を学ぶ前に抽象的な概念を学んでおくことで、各技術要素の役割や住み分けを、整理できます。

この後、各セキュリティに関する用語を学んでいくんですが、この概念を常に意識しておくことで、各技術を関連付けて捉えやすくなります。

第二章「SSL通信とは」で、SSL通信の基礎知識を学ぶ

ここでは、SSL通信を成り立たせるための、暗号化技術の基礎中の基礎を学びます。

  • 共通鍵暗号方式と公開鍵暗号方式
  • メッセージ認証符号 - MAC(Message Authentication Code)
  • デジタル署名

例えば、デジタル署名の説明は、例え話として、以下のように記載されています。

アリスの秘密鍵はアリスしか持っていません。つまり、アリスの公開鍵で復号できるデータを作成することができるのは、秘密鍵を持っているアリスだけです。ボブは、アリスから送付されてきたデータがアリスの公開鍵で復号化できることで、これはまさしくアリスから送付されてきたものだということを確認することができます。

暗号化技術の説明ではよく出てくる(?)アリスとボブですが、メッセージのやり取りを例に、非常に平易にわかりやすく解説してくれています。

これらの暗号化技術要素を学んだ後、実際のSSL通信(ハンドシェイクフェーズからデータ転送フェーズまで)を、詳しく解説されています。

図付きなので、むっちゃわかりやすい。

010

また、SSL1.0〜SSL3.0や、TLS1.0のプロトコルのおける違い、HTTPS、FTPS、SMTPS、SSL-VPN、また、SSL通信以外のIPSec、S/MIME、SSHなども解説があります。

第三章「SSL通信の構築準備」で、証明書について学ぶ

SSL通信に必要な証明書について、ど真ん中から学びます。

証明書に必要な要素と合わせて、自己証明書(いわゆるひとつのオレオレ)、実在証明、実在証明:EV、プライベート認証局による証明などの違いを学びます。

昔、自分も何度か、オレオレ証明書を作ってみたり、証明書発行のためのCSR(Certificate Signing Request:証明書署名要求)を作ったことあるんですが、正直コマンド叩いてても、ピンと来なかったんですよね。この作業の意味とか、認証局がCSRを見て、実際何をするのかとか。

改めて、暗号化技術と証明書の役割を整理しておくことで、作業の意味が非常に明快にわかるようになりました。

第四章「実際にSSL通信(HTTPS環境)を設計・構築してみよう!」で、手を動かして腹で理解する

自分が一番気に入っているのが、この章です。実際にコマンド叩きながら、HTTPS環境作っていきます。

秘密鍵の作成

opensslで、RSA秘密鍵の鍵長をいろいろ変更して、秘密鍵作った後、その中身を覗いてみます。鍵長の違いで秘密鍵の中身が変わるのとか、いろいろ試してみると楽しいです。

$ openssl genrsa 2048 > /etc/httpd/conf/server.key

CSRの作成

秘密鍵からCSRを作成します。CSR作成時には、秘密鍵をインプットに、企業情報や証明するドメイン名、管理者のメールアドレスなんかを入力します。

このタイミングでドメイン名入れていたこととか、今更のように思い出しました。

openssl req -new -key /etc/httpd/conf/server.key > /etc/httpd/conf/server.csr

証明書の作成

CSRから証明書を実際に作成します。

自己証明書(オレオレ証明書)とパブリック証明書の違いが、証明書を署名する秘密鍵所有者の違いということを、実際にコマンドを叩きながら理解することができます。

あぁ、証明書の違いってそういうことか!と腹落ちするところですね。

サーバー環境構築

最後にapacheに対して、各種設定を実施していき、SSL通信されていることをtcpdumpと、WireSharkを利用して確認します。

まとめ「各個別要素をググるより、圧倒的に学習効率が良い入門書」

20171025_181218

(改めてみると、すげぇ表紙だ・・・)

一つのテーマに沿って順序立てて説明されている、書籍というフォーマットを最大限活かした良書だと思います。

良かった点
・程よい分量(集中して読めば、だいたい3〜5時間ほどで読了可能、紙の本として151ページ)
・情報量が適切(解説が薄すぎず、濃すぎず)
・手を動かしながらHTTPS環境構築することで、理論が腹落ちする
・安い!(kindle価格¥320、kindle unlimited対象)

関連する概念を一気通貫で学ぶには、こういった書籍がやっぱり良いなぁと思った体験でした。このテーマについて再学習したいエンジニアにとっても、エンジニア初級者にとっても良い本だと思うので、気になった方は購入いただいてはどうでしょうか。

食べる!SSL! ―HTTPS環境構築から始めるSSL入門 小島 拓也

それでは、今日はこのへんで。濱田でした。