カウンター

2014年1月29日水曜日

SSL通信

最近お仕事で扱うことがあったので、備忘をかねてちょっとメモしておきます。

そもそもSSL通信とは、Secure Sockets Layerの略でhttp専用の暗号化通信のこと。公開鍵暗号を利用しています。

公開鍵暗号方式とは、ざっくりいうと暗号鍵と復号鍵が違う、という方式です。共通鍵方式の方が計算量は少ない、処理が早いのですが、知らない人同士が初めて通信する場合って当然共通鍵を持ってないので、共通鍵の交換にこの公開鍵暗号方式が使われるわけです。

SSLに戻ります。SSL通信を送信すると、まずWebサーバは自身のサーバ証明書を認証局の秘密鍵で暗号化して送ります。認証局とは、サーバ証明書を保証する第三者機関です。サーバ証明書とは、読んで字のごとく、自分のサーバの身分を証明するものです。当然第三者(認証局)によって証明されているものであり、これがあることで、なりすましを防ぐわけです。

サーバ証明書が届くと、クライアント側でそれを確認するフェーズになります。まず、認証局の秘密鍵によって暗号化されているので、認証局の公開鍵によってそれを復号化します。

認証局の公開鍵は、一般にはルート証明書という形式で既存のブラウザ等に既にインストールされていることが多いです。下記にIEのルート証明書一覧をのっけました。



ルート証明書が既にインストール済みであれば、復号化してサーバ証明書を確認できます。

サーバ証明書内には、サーバのFQDNが記載されています。これをアクセスしたURL(たとえばwww.google.com等)と一致しているかどうかを確認します。つまり、クライアント側は、本当に自分のアクセスしたかったサーバにアクセスしているのか、という検証を、アクセスしたURLとサーバ証明書内のFQDNと一致するかどうかを見て行うわけです。サーバ証明書自体の有効性はルート証明書が保証していますので問題ないわけです。

最終的に、確認が完了すると、クライアント側で共通鍵を作成しサーバ側と共有します。最初にサーバ証明書が来たときに併せてサーバの公開鍵を送っているので、この公開鍵を用いて共通鍵を暗号化しサーバに送ることで、共通鍵の共有は完了です。

で、ようやく暗号化通信ができるようになりました。

最初に、公開鍵暗号方式で証明書を送り、共通鍵を共有します。その後は、共通鍵で暗号化通信を行います。これが、SSL通信の概要になります。


ちょっと文字ばっかりになってしましました。。。

0 件のコメント:

コメントを投稿