PKIとその実装を学ぶ
8月は相当な忙しさで更新が滞っていました。業務システムに対するいくつかの新機能リリースに加えて、別システムで動作しているロードバランサのバグに派手に引っかかり、ロードバランスしている全サーバへのアクセスが数時間おきに不安定になるという酷い事態に見舞われていました。先週でようやく全て解決できましたが・・・。
で、本来の記事の流れではSquidでSSL Bumpすることを考えていましたが、今月のトラブルをきっかけに色々と調べていくうちにPKIやTLSの理解が不十分であることが自覚できました。丁度良い機会なので知識を整理しておこうと思いたち、ちょっと寄り道することにしました。
まずはSquidの話を続けてきたこともあるので、PKIの話をベースにしつつもHTTPSにまつわる話にフォーカスしていくつもりです。そして記事構成に悩むところですが・・・。今回はまず導入みたいな記事です。
PKIとHTTPS
PKIとは何かをすぐに説明できるでしょうか。この記事ではPKI単体についてはあまり触れませんが、インターネットという非セキュアなネットワークを介して通信を行う際に発生する以下の脅威に対応できる仕組みです。
- 盗聴
- なりすまし
- 改ざん
どう対応していくのは別の記事に任せるとして、PKIでは公開鍵暗号方式の仕組みを使用してこれらの脅威に対応しています。これは完全に正しいですが、HTTPSによる通信の詳細を知るためには公開鍵暗号方式のみの理解では足りません。
HTTPSのような暗号化通信の仕組みを解説する場合、多くは以下のような流れでしょう。
- 共通鍵暗号方式の仕組みの説明し、
- 必要な共通鍵の数の多さを語り、
- 公開鍵暗号方式の仕組みを説明し、
- 公開鍵暗号方式を使用する場合のシステム負荷の高さに触れ、
- HTTPSでは共通鍵暗号方式と公開鍵暗号方式のいいとこ取りをしている。
完璧な流れだと思います。ただ、それだけでは三流IT技術者としてはHTTPS通信において具体的に何が行われているのか分からないので、一つ一つの過程と実装を確かめていきたいと思います。次の記事から。
OpensslかWindows Serverの認証局機能を使ってプライベートCAを立てて、証明書や鍵の中身を見ながら理解を含めていく予定です。
何に使うのか
おそらくこれらをちゃんと理解したところで、通常のエンプラのインフラシステムで役に立つ回数はそんなに多くないはずです。とはいえ、暗号化通信が叫ばれる昨今、ハッシュ関数やTLSバージョンの陳腐化等、微妙に変化が激しい分野になりつつあります。さらにこれらの変更がかかった場合の影響範囲は甚大なので、それぞれの技術を正しく覚えておくことは役に立つでしょう。例えば最近で少しインパクトのある変更として、Office365に接続する際の暗号化方式としてTLS1.2以外受け付けなくなるというものがあります。
また、当然ながらWebサービスの開発者もこれらについては意識しておく必要があります。インフラ担当(ミドル担当)に丸投げしないように。
その他の雑記
はてなブログで記事を書くとき、編集を見たままモードで作成しています。GUIツールにHTMLのtable作成モードがないのでtable作成が本当に面倒です。私のHTMLの知識はHTML4.0とCSS2.1で止まっていますが、そろそろ表現の幅をつけていきたいところです。というか、はてなブログのCSSも何がどこに書いてあるのかよくわからないです。次の週末はデザインも弄ってみようかな。