SSLを改めて理解してから AWS Client VPN に挑む
AWS Client VPN はリモートアクセスVPNを実現するためのAWSサービスです。 クライアントPCから AWSの各種リソースに安全にアクセスすることができます。
さて、実際に AWS Client VPNの作業手順などを調べてみると、
サーバー/クライアント証明書
や プライベートキー
、 認証局
などといった用語
がどんどん出てきます。
これらは全て AWS Client VPNに必要な要素です。 が、 これらがどのように関わり合って AWS Client VPNを実現しているのか はこれら手順を読んでも、中々理解するのは難しいものがあります。
そこで本記事は AWS Client VPNの中心技術である SSL について主に解説してみます。
SSLで使用される サーバー証明書
や 認証局
などがどんな役割を持つのかを理解していただき、
AWS Client VPN(SSL-VPN) 環境の構築がスムーズにできるようになればと思います。
目次
SSL とは
SSL (Secure Sockets Layer) は、インターネット上でデータを暗号化し、 セキュアに通信するためのプロトコルです。 第三者による通信内容の盗み見・改ざんを防ぐことができます。
▲ 鍵のマークは SSL通信を表している
SSLは セッション層 のプロトコルです。セッション層から上を暗号化します。 (同じ AWS のVPNサービスに サイト間VPNがありますが、こちらは IPsec を使用した ネットワーク層の暗号化 です)
※ この暗号化技術は TLS (Transport Layer Security) と合わせて、 SSL/TLS
とよく表現されます。
SSLと TLSは 大枠の仕組みは同じ です。
SSL3.0 を元に TLS1.0が作成され、現在は TLS1.3がリリースされています。
現在一般に使われている SSL通信は、実際は TLSなのですが、
SSLという用語が広く普及しているため、
TLSのことを SSL/TLS、または単に SSL
と呼んだりします。
(以降の説明は "SSL" で統一します)
SSLサーバー証明書
SSL通信を行うにあたって必要な SSLサーバー証明書 をこの章で説明します。(以降 単にサーバー証明書と呼びます)
サーバー証明書は 電子証明書 の一つです。 サーバー証明書という名前のとおり サーバーの身元を証明するものです。 「ウェブサイトの実在性の確認」 および 「通信データの暗号化」 に使用されます。
サーバー証明書は 認証局(CA: Certification Authority) と呼ばれる 信頼された第三者機関 によって発行されます。
実際に見てみる
試しにこのサイト dev.classmethod.jp
のHTTPS通信時に使用される サーバー証明書を見てみましょう。
ブラウザの URL欄にある鍵マークが SSL通信を行っていることを表していました。 鍵マークを選択、「証明書」を選択してみます。
*.classmethod.jp
サーバー証明書が確認できました。
さらに上にある Amazon Root CA 1
も見てみましょう。
こちらがルート証明書です。
*.classmethod.jp
サーバー証明書は
「Amazon Root CA 1」 という 認証局から発行されたサーバー証明書 であることが分かりました。
(※厳密にいうと 「Amazon Root CA 1」ルート認証局 に認証された「Amazon」中間認証局
から発行されたサーバー証明書です)
発行手順
サーバー証明書の発行プロセスを見ていきましょう。
※前提知識として 公開鍵暗号 、 共通鍵暗号 の 2つの鍵暗号方式があります。 公開鍵暗号は データの暗号化・復号化に別々の鍵(公開鍵・秘密鍵) を使う方式、 共通鍵暗号は データの暗号化・復号化を 1つの鍵 (共通鍵) で行う方式です。
- 公開鍵・秘密鍵の作成
まずはサーバー側で暗号化通信を行うための公開鍵・秘密鍵を生成します。
※この公開鍵をクライアントに渡すだけで暗号化通信はできます。 が、まだ ウェブサイトの身元証明 ができていません。 クライアントは、サーバーがナニモノなのか分かりません。
-
サーバー証明書発行の申請
認証局にサーバー証明書の発行を申請します。 この申請書 (メッセージ)を 証明書署名要求 (CSR: certificate signing request) と言います。 CSRには
サーバーの公開鍵
とサーバーの情報(ディスティングイッシュネーム)
を含みます。※ ディスティングイッシュネームには WebサイトのURL( コモンネーム)や 組織名、国/地域などの情報が含まれます。
-
サーバー証明書の受領
認証局は CSRを厳正に審査します。 審査が通れば サーバー証明書を発行します 。
サーバー証明書には
サーバー所有者の情報
とサーバーの公開鍵
、 そしてデジタル署名
が含まれています。 このデジタル署名は 公開鍵や所有者情報から得られるハッシュ値を 認証局の秘密鍵で暗号化したもの です。デジタル署名 (認証局の秘密鍵で暗号化したもの) 、これが後述のSSL通信のプロセスで使用されます。
SSL 通信
サーバー証明書を使った SSL通信の流れを見ていきましょう。
前提
クライアントPC には、あらかじめ 信頼できる認証局の証明書 (= 認証局の公開鍵) が保存 されています。
(以降これを ルート証明書
と呼びます)
Webブラウザで実際に見てみましょう。
Chrome の設定から 証明書の管理
を選択すると認証局の一覧、それぞれの証明書を見ることができます。
改めて登場人物と鍵たちを見てみます。
- サーバー
- サーバーの
秘密鍵
と公開鍵を含むサーバー証明書
を持っています - サーバー証明書のデジタル署名は
認証局の秘密鍵で暗号化
されたものです
- サーバーの
- クライアント
認証局の公開鍵を含む ルート証明書
を持っています
- 認証局
- サーバー証明書を発行しています
- クライアントに、信頼できる認証局としてルート証明書が保存されています
プロセス
上の構図を把握していれば複雑ではありません。
- サーバー証明書の送付
クライアントからの SSL接続要求に対して、サーバーは サーバー証明書を送付 します。
-
サーバー証明書の検証
クライアントは送られてきたサーバー証明書の デジタル署名の復号化 を試みます。 ルート証明書の 公開鍵を使って復号が成功すれば、 通信相手は認証局によって身元を証明されたサーバーであることが確定します。
-
データ暗号化用の共通鍵の作成/共有
実際のデータのやりとりは共通鍵で暗号化します。
- ① クライアントは共通鍵を作成します
- ② サーバー証明書の公開鍵で共通鍵を暗号化します
- ③ 暗号化された共通鍵をサーバーに送付します
- ④ 暗号化された共通鍵を秘密鍵で復号化します
-
SSL通信開始
上記プロセスが完了すると SSL通信が開始されます。 データのやりとりは共通鍵によって暗号化/復号化されます。
AWS Client VPN (SSL-VPN)
ここまで理解できれば、AWS Client VPN(SSL-VPN) をすんなり設定できるかと思います。
SSL技術を利用した VPN接続を SSL-VPN といい、 AWS Client VPNは マネージドな SSL-VPNサービス です。
SSL-VPN(AWS Client VPN) で行うことは以下の 2つです。
これまで説明してきた SSL通信に クライアントの認証
を追加しただけですね。
- SSLによる暗号化通信
- クライアントの認証
SSLによる暗号化通信
AWS Client VPN において、SSL通信のサーバーの役割を担うリソースが クライアントVPNエンドポイント です。 クライアントはこの エンドポイントを経由して、各 AWSリソースへのアクセスが可能となります。
サーバー側で準備する必要のあるものは サーバー証明書
と サーバーの秘密鍵
であったことを思い出してください。
それらの情報は AWS Certificate Manager (ACM) に安全に保管し、使用されます。
クライアントの認証
AWS Client VPNにおけるクライアントの認証は、 Active Directory 認証 と 相互認証 をサポートしています。 どちらか一方、もしくは両方を選択することができます。
- Active Directory 認証
AWS Managed Microsoft AD
やSimple AD
といった AWS Directory Service を利用した AD認証です。 -
相互認証
相互認証は
クライアント証明書
を使用した認証です。 サーバーの身元を証明するためにサーバー証明書が使われましたが、それのクライアント版です。クライアント証明書にあるデジタル署名 を復号化して認証を行うため、 クライアントのルート証明書 をあらかじめ ACMに保管する必要があります。
おわりに
以上、 SSLを改めて理解してから AWS Client VPN に挑む
でした。
実際の AWS Client VPN構築は既に記事があるのでそちらを参考ください。 (1つ目が 相互認証、2つ目が AD認証の やってみた記事です)
この記事で SSL および AWS Client VPNへの理解が少しでも深まれば幸いです。