SSLとは?

SSLとは?

SSLは「Secure Sockets Layer」の略でサーバー及びクライアント認証と暗号化通信を行うためのプロトコルです。
SSLというコトバを聞き慣れない方でも実は知らず知らずに使っているかもしれません。

SSLはその機能の通り暗号化を使った通信を行うときに威力を発揮します。
例えば、みなさんも1度は使ったことがあるであろうオンラインショッピングでは必ずと言っていいほどこのSSLを使用しています。

Internet ExplorerでSSL通信を行っていると、ウインドウの右下に以下のような鍵のマークが出てきますね。

通常インターネットを閲覧している時に流れているメッセージは暗号化されていないため、メッセージを第3者に盗聴されてしまう危険性があります。

とくにオンラインショッピングを行っている通信ではクレジットカードの番号など重要なメッセージがインターネットを流れおりこのままでは大変危険なわけです。

そこでインターネットに流れるメッセージを暗号化することにより安全な通信を行うためのプロトコルが開発されました。

OSI参照モデルとの関連は?

OSI参照モデルではセッション層で機能し、HTTPやFTPなどの上位のプロトコルを利用するアプリケーションソフトからは、特に意識することなく透過的に利用することが出来ます。


SSL動作シーケンス

それではSSLの詳細な動作シーケンスを見ていこう。

・Client Hello
クライアントからサーバに初めて接続を行うとき、あるいはサーバから Hello Request を受け取った時に送信します。
Client Helloの中には使用する暗号化アルゴリズムや圧縮アルゴリズムのリストが格納されています。
既存のセッションを再開する時は、セッションIDも送信します。
Client Hello を送るとクライアントはサーバ側から送られてくる Server Hello を待ちます。

・Server Hello
クライアントが送ってきた暗号化アルゴリズムと圧縮アルゴリズムのリストからどれを使用するかを指定します。
セッションIDも送られてきたおり、サーバが許可する場合は既存セッションを再開します。

以上お互いにHelloメッセージをやり取りすることでクライアントとサーバ間のセキュリティ処理方法が決定されます。
具体的にはプロトコルのバージョン、セッションID、暗号アルゴリズム、圧縮アルゴリズムといったものが決定され、乱数が生成されお互いに交換されます。

・Server Certificate (オプション)
サーバから自身の証明書(CCITT勧告X.509で規定される形式)をクライアントに送信します。
また、ここにはルート認証局までの証明書のリストを全て含んだ形式で送信されます。

・Server Key Exchange (オプション)
サーバが証明書を持っていない場合、または持っていたとしても署名にしか使用できない場合(Server Certificateで送信したサーバーの証明書に鍵交換可能な公開鍵が含まれない場合)に、一時的にRSA鍵を生成しサーバの署名を付加して送信されます。

・Certificate Request (オプション)
サーバからクライアントの証明書の提示を要求する場合に送られるメッセージです。
このメッセージには、サーバが信頼する認証局のリストが付加されています。

・Server Hello Done
Helloメッセージの一連のやり取りが無事に終了すると Server Hello Done がクライアントへ送られます。
その後サーバはクライアントからのメッセージを待ちます。

・Client Crtificate (オプション)
サーバから Certificate Request を受信した場合に送信します。
サーバからの要求に適した証明書がなければno_certificateのAlertを返します。
データの形式は Server Certificate と同じです。

・Client Key Exchange
Client Hello と Server Hello でやり取りした際に取り決めた暗号化アルゴリズムを使用して、プリマスターシークレットデータを生成して、暗号化して送ります。
プリマスターシークレットデータとは、暗号化に使用するセッション鍵を生成する時に使用されるマスタシークレットを生成する元となるデータをプリマスターシークレットデータと呼びます。

・Certificate Verify (オプション)
クライアントの証明書を送っている場合、クライアントは今までのサーバとのHelloメッセージのやり取りから署名を生成しサーバに送ります。
具体的には今までのやり取りのデータのハッシュ値をとりクライアント側の秘密鍵で暗号化したものを送ります。
サーバは、クライアントから受け取った証明書からを公開鍵で複合化し、取得したハッシュ値と比較して署名の検証を行います。

・Change Cipher Spec
クライアントから双方で決定された暗号化アルゴリズムで通信を行うことを宣言するメッセージを送ります。

・Finished
クライアントはサーバとのやり取りが正常に終了し、セッション確立のために必要なデータが揃ったことをサーバに知らせるために、このメッセージを送ります。

・Change Cipher Spec
サーバから双方で決定された暗号化アルゴリズムで通信を行うことを宣言するメッセージを送ります。


・Finished
サーバはクライアントとのやり取りが正常に終了し、セッション確立のために必要なデータが揃ったことをクライアントに知らせるために、このメッセージを送ります。

これで双方の認証は終了です。
認証が行われた後は、双方でプリマスタシークレットデータからセッション鍵が生成され、暗号化されたセッションが開始されるわけです。

 

関連記事

メールマガジン

ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!

「初心者にも理解できるネットワーク技術」

これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。

もちろん無料です!!

↓メールマガジン購読はこちら↓

メールアドレス: