【SSL/TLS】SSL/TLS通信を真面目に勉強してみた

 ちょっと前にSSL/TLS通信をしてみたくてオレオレ証明書を発行して記事を書きました。

 ただこのときはどのコマンドが何をしているのかもさっぱりの状態でした。なので大本のSSL/TLS通信の仕組みから、SSL証明書の発行の仕組みまで勉強してみました。

 ネットで調べた知識になりますので大雑把な知識になります。間違っている箇所があればコメントください。

SSL/TLSの仕組み

 その前に、SSL/TLSの概要から。

 SSL/TLSというのは、大雑把に言えばWebサーバーとブラウザ間の通信でデータを暗号化して通信をする仕組み(プロトコル)のことです。

 TLSはSSLの次世代版みたいな感じなのですが、SSLが利用されていた期間が長くてSSLで世間に浸透していたので、その名残でSSLの表記に残ってしまっているみたいです。

1.SSL/TLS接続を要求する

 まずクライアント(ブラウザ)から対象のサーバーへSSL/TLS通信の接続要求を送信します。

2.サーバー証明書を送付する

 サーバーは認証局から発行された「サーバー証明書」をクライアントに送付します。このサーバー証明書の中には公開鍵が含まれています。

 クライアント側では、ブラウザに事前に組み込まれているルート証明書と送付されたサーバー証明書を使ってサーバーの信頼性を検証します。署名がルート証明書の内容と合致したときににサーバーは信頼できると判断して、共通鍵を生成します。

3.公開鍵暗号化方式でクライアントの共通鍵をサーバーに送付する

 クライアントで生成された共通鍵はサーバー証明書に含まれている公開鍵で暗号化し、サーバー側に送付されます。

 暗号化された共通鍵を受け取ったサーバー側は秘密鍵で共通鍵を復号します。

4.共通鍵暗号方式で暗号化通信を行う

ルート証明書

 ルート証明書とは、認証局(CA)の証明書のことです。認証局(CA)の証明書は自己証明書なのですが、認証局(CA)は厳格な監査基準を満たしセキュリティもばっちりなので、認証局(CA)の自己証明書は信頼が置けることになります。

 ルート証明書は出荷段階ですでにOSやブラウザにインストールされています。ただ、自分で発行したオレオレ証明書の場合はブラウザの規定で設定されていないので、自分で設定する必要があります。

サーバー証明書発行の仕組み

1.サーバーで秘密鍵を作成する

 サーバーはサーバー証明書を発行してもらうための申請書を作成するため、秘密鍵を作成します。

2.サーバーで申請書を作成する

 サーバーは作成した秘密鍵で申請書を作成します。この申請書の中には公開鍵も含まれます。

3.認証局(CA)はサーバー証明書を作成する

 認証局(CA)は申請者の情報を審査します。問題がなければ、申請書からサーバー証明書を作成します。

ルート証明書

 ルート証明書は自己証明なので下記のように自分で申請書に署名して証明書を作成します。

中間認証局

 オレオレ証明書の発行だけならここまで理解していればいいのですが、実際の運用では認証局はルート認証局と中間認証局とがあります。

 中間認証局は中間証明書というものを持っていて、中間証明書の秘密鍵を使ってサーバー証明書に署名することでサーバー証明書の信頼性を担保しています。中間証明書も階層構造になっていて、ルート証明書の秘密鍵を使ってルート認証局に署名されることで中間証明書の信頼性を担保しています。

 ルート認証局は中間認証局よりも上位の最上位認証局になります。ルート認証局よりも上位の認証局はないので、ルート証明書は自分で署名をしている自己証明書となります。

中間証明書を使用したSSL/TLS通信

 大きな流れは変わらないのですが、サーバーがサーバー証明書と中間証明書を持っていて、SSL/TLS接続要求を受け取ると、この2つをクライアントに送付します。

 クライアント側はルート証明書を使って中間証明書を、中間証明書を使ってサーバー証明書を検証し、サーバーの信頼性を検証します。

最後に

 このような仕組みを理解してからオレオレ証明書を発行してみたら、一層理解が深まるんじゃないのかな、という気持ちで調べてみました。

 ネットでパッと調べただけなので間違っている箇所があるとは思いますが、そのときはコメントで教えて下さい。

コメント

タイトルとURLをコピーしました