AWS Directory Service (マネージド Microsoft AD) と連係する証明書サーバーを構築する

Windowsの「Active Directory証明書サービス」を使って、プライベート認証局(CA)を構築してみました。
2020.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは! AWS事業本部の青柳@福岡オフィスです。

企業内で利用するプライベート証明書を発行するための「プライベート認証局」(プライベートCA) を構築する手段の一つに、Windows Serverの「Active Directory証明書サービス」を使用する方法があります。

Active Directory証明書サービスを利用する利点として、Active Directoryドメインと連係することによってドメイン内のコンピューターやユーザーに対して証明書を自動的に配布することができる等があります。

今回は、AWSが提供するマネージドなActive Directoryサービスである「AWS Directory Service (マネージド Microsoft AD)」に対して、Active Directory証明書サービスを組み合わせる方法を試してみました。

構成

VPC上にAWS Directory Serviceを「マネージドMicrosoft AD」で構築して、同じVPC内に「Active Directory証明書サービス」(Active Directory Certificate Services; AD CS) を導入したルートCAサーバーと、Webサーバーを配置します。

オンプレミスネットワークに見立てたVPCを用意して、VPCピアリング接続します。

Webサーバー、WebクライアントはいずれもDirectory Serviceのドメインに参加しており、ドメイングループポリシーによりルートCA証明書が配付されます。 これによって、ルートCAが発行した証明書の正当性を確認することができます。

(冗長性やセキュリティ面を考慮するとCAは複数設置することが推奨されますが、今回は1つのみの構成としました)

構築手順

ステップ 1: AWS Directory Serviceの構築

マネジメントコンソールより、以下のパラメーターで構築します。

  • ディレクトリタイプ: AWS Managed Microsoft AD
  • エディション: Standard Edition
  • ディレクトリのDNS名: cmdemo.local
  • ディレクトリのNetBIOS名: CMDEMO

(残りのパラメーターは適宜設定してください)

ステップ 2: 証明書サーバーの構築

Windowsインスタンスを作成して、セキュリティグループを設定する

今回は「Windows Server 2019」のAMIからEC2インスタンスを作成することにします。

証明書サーバーに対して証明書発行の要求元 (今回の場合はWebサーバー) がアクセスできるように、セキュリティグループのインバウンドルールを以下のように設定して、インスタンスに適用します。

プロトコル ポート範囲 ソース 説明
TCP 135 <要求元が存在するネットワークCIDR> RPC
TCP 139 <要求元が存在するネットワークCIDR> NetBIOS-ssn
TCP 445 <要求元が存在するネットワークCIDR> SMB
TCP 49152-65535 <要求元が存在するネットワークCIDR> RPC (non-privilege ports)

サーバーをDirectory Serviceのドメインに参加させる

Directory Serviceのプロパティの「DNSアドレス」欄に記載されているIPアドレスを確認します。

サーバーの「TCP/IPv4のプロパティ」の「DNSサーバーのアドレス」欄に、確認したIPアドレスを設定します。

「システムのプロパティ」から「コンピューター名/ドメイン名の変更」を選択して、ドメインに参加します。

ドメイン参加の権限を持つアカウントの入力を求められるので、Directory Serviceの構築時に設定した「Admin」アカウントとパスワードを入力します。

ドメイン参加後はドメインアカウント「CMDEMO\Admin」でログオンしてください。

(※ 本来は、ドメイン管理者アカウントを用いるのではなくADCS用のドメインアカウントを作成して使うべきですが、今回は手順簡略化のためこのまま進めます)

役割「Active Directory証明書サービス」をインストールする

サーバーマネージャーを起動して、「役割と機能の追加ウィザード」を実行します。

「役割」の選択で「Active Directory証明書サービス」にチェックを入れます。

必要な機能の追加の確認では「管理ツールを含める」にチェックを入れて「機能の追加」をクリックします。

「機能」の選択では何も追加せず、「役割サービス」の選択で「証明機関」のみにチェックを入れます。

そのままウィザードを進めて、Active Directory証明書サービスのインストールを完了します。

Active Directory証明書サービスを構成する

役割のインストールの完了後、サーバーマネージャーの上部に表示されている「!」アイコンをクリックして、「対象サーバーにActive Directory証明書サービスを構成する」をクリックします。

「次へ」をクリックします。

「証明機関」にチェックを入れて、「次へ」をクリックします。

「エンタープライズCA」を選択して、「次へ」をクリックします。

「ルートCA」を選択して、「次へ」をクリックします。

「新しい秘密キーを作成する」を選択して、「次へ」をクリックします。

暗号化のオプションを必要に応じて選択します。(通常はそのままで構いません) 「次へ」をクリックします。

CAの共通名 (Common Name) を入力します。(デフォルトのままでも構いません) 「次へ」をクリックします。

CA証明書の有効期間を指定します。(通常はそのままで構いません) ※ CAが発行する証明書の有効期間ではありません 「次へ」をクリックします。

証明書データベースとログの場所を指定します。(通常はそのままで構いません) 「次へ」をクリックします。

サマリの内容を確認して、問題が無ければ「構成」をクリックします。

「構成に成功しました」と表示されたことを確認して、構成ウィザードを閉じます。

ステップ 3: Webサーバーのためのサーバー証明書を発行してみる

サンプルとして、サーバー証明書を発行して、Webサーバー (IIS) に適用してみます。

準備として、以下の手順でWebサーバーを用意します。

  • Directory Serviceのドメインに参加する
  • 「役割と機能の追加ウィザード」より「Webサーバー (IIS)」と「IIS管理ツール」をインストールする

準備ができましたら、証明書の発行に進みます。

証明書の発行を要求する

「ファイル名を指定して実行」よりcertlm.mscを入力して実行します。

「証明書 - ローカルコンピューター」画面が起動します。 ツリーから「個人」を選択して、「操作」→「すべてのタスク」→「新しい証明書の要求」の順に選択します。

「次へ」をクリックします。

「Active Directory登録ポリシー」を選択して、「次へ」をクリックします。

「コンピューター」にチェックを入れます。 「詳細」をクリックすることで、証明書の詳細が確認できます。

内容を確認しましたら、「登録」をクリックします。

「状態:成功」と表示されたことを確認して、「完了」をクリックします。

発行された証明書の内容を確認してみましょう。 証明書をダブルクリックします。

問題無いようですね!

IISに証明書を適用する

インターネットインフォメーションサービス (IIS) マネージャーを起動します。 ツリーよりWebサーバーを選択して、「サーバー証明書」アイコンをダブルクリックします。

サーバー上に登録されている証明書が、IISから認識されていることを確認します。

ツリーより「サイト」→「Default Web Site」の順に選択して、操作の「バインド」をクリックします。

「追加」をクリックします。

種類「https」、SSL証明書「(発行した証明書)」を選択して、「OK」をクリックします。

「https」が追加されたことを確認して、画面を閉じます。

これで、IISにサーバー証明書が適用され、HTTPSでアクセスできるようになりました。

ブラウザでWebサーバーへアクセスして確認する

別のクライアントやサーバーからブラウザでアクセスして、サーバー証明書がちゃんと認識されることを確認します。

前提として、アクセスするクライアントやサーバーは、Webサーバーと同じドメインに参加している必要があります。 クライアントやサーバーがドメインに参加することでCAルート証明書が自動的に配布されるためです。 (CAルート証明書がクライアント/サーバーに無ければ、Webサーバーのサーバー証明書は正当なものであると証明されません)

ブラウザを起動して、アドレスバーにhttps://web01.cmdemo.localと入力します。

Webサイトが表示されましたら、鍵マークをクリックして、サーバー証明書を確認します。

おわりに

AWS Directory Service (マネージド Microsoft AD) でも、Active Directory証明書サービスが利用できることが確認できました。

今回はWebサーバー向けのサーバー証明書の発行を試しましたが、それ以外にも、クライアント証明書などの発行も行えるのではないかと思います。 いずれ試してみたいと思います。