SSL/TLSについて調べたことまとめ


「SSL/TLSってなんやねん」ってなったので少し調べてまとめた。

SSL

SSL(Secure Socket Layer)は暗号化と認証の機能を提供するプロトコル。具体的には、改竄の検出、デジタル証明書を使って、サーバ/クライアント認証を行う。

TLS

TLS(Transport Layer Security)はSSLの後継のプロトコル。それぞれは独立したプロトコルであるが、同列に扱われることも多く、その場合SSL/TLSと表記されることが多い。Qiita(qiita.com)ではTLS1.2が使われている。

以下に、SSL/TLSに則ったクライアントとサーバーの通信の手順に従って、まとめた。

1. サーバーは公開鍵の正当性を証明するために、認証局に登録申請を行う

サーバーは認証局に対して、公開鍵を提出し、証明書の発行を依頼する。

認証局(CA,Certificate Authority)

  • デジタル証明書を発行する実体である。
  • 証明書の発行サービスに課金する商用CAは多い。政府などではCAを独自に立てていることもある。
ルート認証局
  • 自分の正当性を自身で証明し、他の認証局へ証明書を発行する最上位の認証局。このためルート認証局として認められるためには厳しい審査を受ける必要がある。
中間認証局
  • ルート認証局等上位の認証局より信頼を受ける事で、自身の正当性を証明する。
  • 中間認証局の中には、ルート認証局に繋がれている中間認証局に「信頼を受ける」と言う「信頼の連鎖」で繋がれている場合もある。

PKI(Public Key Infrastructure)

  • 公開鍵基盤とも呼ばれる公開鍵暗号方式を利用した認証および、盗聴防止基盤のこと。

PKIによって第三者期間である認証局(CA)が、デジタル署名を利用したデジタル証明書を発行し、公開鍵が正当な送信者のものであることを保証する。

2. 認証局がサーバーに対して、デジタル証明書を発行する

  • 認証局は提出された申請書類に基づいて、公開鍵の所有者の本人性を審査し、証明書を発行する。
  • デジタル証明書には、公開鍵、所有者の情報などとともに認証局のデジタル署名が付加されている

ここからは実際にHTTP通信が行われる流れ

3. クライアントがサーバーに接続すると、サーバは認証局の署名付き証明書を返信する

4. クライアントは証明書が本物であることを確認する

  • クライアントは、証明書を認証局の公開鍵で復号し、デジタル証明書内の情報と認証局の署名を確認する

利用される暗号の種類

  • Qiita(qiita.com)では公開鍵暗号の一つであるRSAが利用されている。(ブラウザのアドレスバーの鍵マークから確認)
  • これ以外にもサポートされている公開鍵暗号はある。

証明書が正当なものであると確認すると、以下の作業に移る。

5. クライアントは乱数を発生させ、サーバの公開鍵で暗号化してサーバーに送る

  • この乱数は実際にHTTP通信を行う際の鍵を作ることに利用される。

6. サーバーは秘密鍵で、暗号化された乱数を復号する。

  • 公開鍵暗号方式を利用して、サーバーは自身の秘密鍵で乱数の復号を行う。

7. サーバとクライアントで共通鍵を使って暗号化通信を行う。

  • サーバとクライアントの双方で、マスターシークレット(MS)と呼ばれる鍵を生成し、このMSから生成した共通鍵を使って暗号化通信を行う。
  • サーバーとクライアントが実際のデータの送受信を行う際には、共通鍵暗号を利用する。
  • このとき、この乱数から2種類の鍵を生成し、「クライアント→サーバ」と「サーバー→クライアント」で異なる鍵を用いる。

まとめ

ざっくりだが、以上の手順を経てHTTP通信が開始される。細かいことはこれから勉強しなければ。