by濱田2014年4月のOpenSSLの脆弱性に起因するHeartbleed事件では、世界中のエンジニアが対応に追われました。この記事を読んでいる人で、あの日のことを懐かしく苦しく思い出す方、多いと思います。自分も例外ではないです。それだけ広く使われていて、インターネット通信における基礎のSSLですが、皆さん、以下の点にすっきり答えられますか?SSLとTLSの違いSSLが保護するレイヤーは?SSHとの違いは?デジタル署名の「署名」の意味とは?証明書は「誰」が「なに」を「どうやって」「証明」しているのか?普段、EC2でキーペア発行したり、証明書導入したりしているエンジニアでも、案外、ここらへんがもやもやしている人も多いのではないでしょうか。ぶっちゃけ、自分がそうでした。そんな折に手に取ったこの本が、自分のニーズにばっちこーいでヒットしたので、今回ご紹介させていただきます。最大の特徴は「腹落ち」させること冒頭に、この本の趣旨が書かれています。本書のタイトルを敢えて「食べる!」とした意図は、SSLの基本や理論を一度しっかりと噛み砕いて理解して「腹落ち」させることで、SSLを自分の体の一部にしてほしいというものです。自分が求めていたのが、この「腹落ち」させる、ということです。新しいことを学習するとき、様々な方法あると思いますが、自分は「実際に手を動かして試してみる」ということを非常に重要視しています。それは、developers.IOの基本理念でもありますし、エンジニアの方なら、皆さんそういう趣向のかたが多いと思います。この本は、SSLについての基本や理論を学びつつ、最後の章では、実際にHTTPS環境を設計・構築します。其の中で、記憶が不確かな点や、自分で他のやり方を試行錯誤しながら、学ぶことができます。本書の構成は、以下の通り。実際にSSL通信(HTTPS環境)を設計・構築してみようこの後、各章の特徴について、簡単にご紹介していきます。(重要)第一章「セキュリティの重要性」でセキュリティの基本概念をおさらいする知っている人には、「今更かよ」という気持ちになるあれですが、最初に、CIAとSTRIDEについて学びます。Privilege)改めてじっくり読んでみたのですが、全体を理解する上で非常にメリットがありました。個々の技術要素を学ぶ前に抽象的な概念を学んでおくことで、各技術要素の役割や住み分けを、整理できます。この後、各セキュリティに関する用語を学んでいくんですが、この概念を常に意識しておくことで、各技術を関連付けて捉えやすくなります。第二章「SSL通信とは」で、SSL通信の基礎知識を学ぶここでは、SSL通信を成り立たせるための、暗号化技術の基礎中の基礎を学びます。デジタル署名の説明は、例え話として、以下のように記載されています。アリスの秘密鍵はアリスしか持っていません。アリスの公開鍵で復号できるデータを作成することができるのは、秘密鍵を持っているアリスだけです。ボブは、アリスから送付されてきたデータがアリスの公開鍵で復号化できることで、これはまさしくアリスから送付されてきたものだということを確認することができます。暗号化技術の説明ではよく出てくる(?)アリスとボブですが、メッセージのやり取りを例に、非常に平易にわかりやすく解説してくれています。これらの暗号化技術要素を学んだ後、実際のSSL通信(ハンドシェイクフェーズからデータ転送フェーズまで)を、詳しく解説されています。図付きなので、むっちゃわかりやすい。SSL1.0〜SSL3.0や、TLS1.0のプロトコルのおける違い、HTTPS、FTPS、SMTPS、SSL-VPN、また、SSL通信以外のIPSec、S/MIME、SSHなども解説があります。第三章「SSL通信の構築準備」で、証明書について学ぶSSL通信に必要な証明書について、ど真ん中から学びます。:EV、プライベート認証局による証明などの違いを学びます。Request:証明書署名要求)を作ったことあるんですが、正直コマンド叩いてても、ピンと来なかったんですよね。この作業の意味とか、認証局がCSRを見て、実際何をするのかとか。暗号化技術と証明書の役割を整理しておくことで、作業の意味が非常に明快にわかるようになりました。第四章「実際にSSL通信(HTTPS環境)を設計・構築してみよう!」で、手を動かして腹で理解する自分が一番気に入っているのが、この章です。実際にコマンド叩きながら、HTTPS環境作っていきます。秘密鍵の作成opensslで、RSA秘密鍵の鍵長をいろいろ変更して、秘密鍵作った後、その中身を覗いてみます。鍵長の違いで秘密鍵の中身が変わるのとか、いろいろ試してみると楽しいです。秘密鍵からCSRを作成します。CSR作成時には、秘密鍵をインプットに、企業情報や証明するドメイン名、管理者のメールアドレスなんかを入力します。このタイミングでドメイン名入れていたこととか、今更のように思い出しました。/etc/httpd/conf/server.csr証明書の作成CSRから証明書を実際に作成します。自己証明書(オレオレ証明書)とパブリック証明書の違いが、証明書を署名する秘密鍵所有者の違いということを、実際にコマンドを叩きながら理解することができます。あぁ、証明書の違いってそういうことか!と腹落ちするところですね。最後にapacheに対して、各種設定を実施していき、SSL通信されていることをtcpdumpと、WireSharkを利用して確認します。まとめ「各個別要素をググるより、圧倒的に学習効率が良い入門書」(改めてみると、すげぇ表紙だ・・・)一つのテーマに沿って順序立てて説明されている、書籍というフォーマットを最大限活かした良書だと思います。unlimited対象)関連する概念を一気通貫で学ぶには、こういった書籍がやっぱり良いなぁと思った体験でした。このテーマについて再学習したいエンジニアにとっても、エンジニア初級者にとっても良い本だと思うので、気になった方は購入いただいてはどうでしょうか。拓也それでは、今日はこのへんで。