以下は、某メルマガに書いた記事です。
オリジナルはこちら
httpsのプロトコル(通信手順)解説の3回目です。
今回はサーバ証明書の検証手順やクライアント証明について解説しています。
今回もお楽しみください。
今回は、httpsの通信手順(プロトコル)解説の3回目となります。 前回の繰り返しですが、通信手順といっても難しいことをやるわけ ではありません。コンピュータ同士でのチャットのようなものです。 チャットと言ってわかりにくければ携帯電話のショートメッセージ による会話と言えばイメージしやすいでしょうか。 そのチャットを通してお互いに必要な情報をやりとりします。 httpsの場合であれば、「あんただれ?」とか「俺は暗号方式○○ か△△が使えるんだけど、そっちは?」などというやりとりを するわけです。 これを専門用語ではプロトコルと呼んでいるにすぎません。 さて、前回はサーバから送られてきたデータを検証する内容の途中 でしたので、その続きからとなります。 なお、この記事では、証明機関・サーバ証明書・署名といった用語 を説明なく使っています。 この連載の以前の記事(httpsその1~その10)ではこういった 用語についても詳しく解説していますので、未読の方はそちらに目 を通してから読んでいただければ、わかりやすいかと思います。 1. TLSハンドシェイク(再掲載) --------------- 前回と同じ内容ですが、httpsでは次の順でやりとりを行います。 1. TLSハンドシェイク 1.1 ご挨拶 1.2 サーバ証明書の検証 1.3 (クライアント証明書の検証) 1.4 鍵交換 1.5 暗号化通信への移行 2. 暗号化した状態でのhttp このうち、「1.1 ご挨拶」を前々回に、「1.2 サーバ証明書の 確認」の一部を前回解説しました。 今回はその続きと、「1.3 (クライアント証明書の検証)」を解説 します。 2. サーバ証明書の検証 ----------- サーバ証明書はサーバが自己の身元保証のためにクライアント側に 送るデータです。 その内容はおおむね次の通りです。 1)サーバ証明書を発行した証明機関名 2)サーバ証明書の署名 3)サーバ証明書の有効期間 4)サーバの所属する組織名 5)サーバのドメイン名 このうち、1と2については前回のメルマガで解説しましたので 今回はその続きです。 3. サーバ証明書の有効期間の確認 ---------------- 次に、サーバ証明書の有効期間を確認し、現時点で有効かどうか を確認します。 有効期間内であっても、例えば秘密鍵が漏出してしまったなどの 理由で無効としたい場合がありますので、証明機関から失効した 証明書リストを取り寄せて確認を行います。 4. サーバのドメインの確認 ------------- 次に、アクセスしようとしているURLのドメイン名と実際のドメイン 名が合っていることを確認します。 ドメイン名というのは、サーバがどこにあるかを示す住所のような ものです。 例えば、次のようなURLを考えてみます。 https://example.com/index.html このうち、exmaple.com の部分がドメイン名になります。 サーバ証明書にはこのドメイン名が含まれています。 クライアントは、実際にアクセスしているURLとサーバ証明書の ドメイン名を比較し、一致していることを確認します。 実際にアクセスしても、証明書のドメインが食い違っていれば、 ヨソの証明書という意味ですから、全く信頼が置けません。 この場合は、「他のサイトの証明書です」といったエラーになり、 やはり通信は行われません。 さて、ここで注意していただきたいのは、以上の確認はあくまで 技術的に正しい証明書であることを証明しているに過ぎないこと です。 いくらサーバ証明書が正しくて、httpsとして正しくても、その サイトが善良であることなど証明できるはずがありません。 あくまで、サーバ証明書に書かれた内容と実際のサイトの情報が 一致していることを証明しているに過ぎません。 あたりまえですが、httpsだからといって接続先が善意のサイト とは限らないということです。 さて、以上の手続きに全て合格すれば晴れて証明書の確認が終わり です。 証明書の確認だけで、これだけのことを行わなければ安全は確保 できないんです。 httpsという仕組みが複雑になるのはこういった手間をかけないと 安全とは言えないからなんですね。 5. クライアント認証 ---------- さて、ここまで説明してこなかったのですが、TLSハンドシェイク の表に、次のようなカッコ付きの行があります。 1.3 (クライアント証明書の検証) これがカッコ付きになっているのは、これがオプション機能で あまり使われていない機能だからです。 なので、ここでもサラリとだけ触れるに留めておきます。 これは、サーバ証明書とは全く逆に、クライアントの身元保証の 仕組みです。 例えば、重要な情報を保持しているページなどであれば、IDとパス ワード以外にも接続できるクライアントを限定したいケースがあり ます。 そのための方法としてhttpsではクライアント証明書を用います。 内容は、サーバ証明書とほぼ同じで、確認する内容も同様です。 ただ、クライアント側から提示して、サーバ側が検証するという 形になり、主従が入れ換わる形になります。 ただ、クライアント証明書というのはインストール作業が結構 難しく、一般の方には手に負えない場合が多いのです。 技術的には非常にスジの良い方式なのですが、活用するハードルが 高いため、あまり活用されていないのが実情です。 技術的に良いからといって広く利用されるとは限らない例と言え ます。 なお、httpsにこだわらなければ、他にも接続元を限定する方法は いろいろと存在しています。 今回はhttpsにフォーカスしていますので、ここでは触れませんが 機会があれば、別記事にて解説をしたいと思います。 6. 暗号化のための鍵交換(予告編) ----------------- さて、ここまででTLSハンドシェイクのうち、以下の3つの 解説を行いました。 1.1 ご挨拶 1.2 サーバ証明書の検証 1.3 (クライアント証明書の検証) 後、大きなテーマとして残っているのは 鍵交換となります。 次回はこの鍵交換の具体的な方法と暗号化通信への移行に ついて解説をします。 長かったhttpsのシリーズですが、次回が最終回の予定です。 もう少しだけおつきあいください。 次回もお楽しみに。