Active Directory 証明書サービスの CA 証明書を更新する場合は適切な権限を使いましょう

皆さん、こんにちは。

今回は、話題を変えて、Active Directory 証明書サービスのお話をしたいと思います。というのも、私自身が体験したトラブルシューティングの話を取り上げたいと思います。

Active Directory 証明書サービスを運用していると、CA 証明書の定期的な更新が必要になります。この CA 証明書の書き換え時に使用する管理者アカウントに付与されている権限をミスすると問題が発生しましたので、備忘録として残しておきます。

<何か起きたか>

CA 証明書の書き換え作業を行った際に使用したアカウントに権限が不足していたため、Active Directory の Public Key Services コンテナー等の必要な場所に書き込みが出来なかった。

そのため、ドメイン メンバー コンピューターの [信頼されたルート証明機関] に更新した CA 証明書が格納されない。それにより、ドメイン メンバー コンピューターから CA を信頼できなくなり、新たな証明書のリクエストが行えなくなる問題が発生。

上記のスクリーン ショットのように、CA が信頼されていない旨のメッセージが。。。

<トラブルシューティング フェーズ>

ドメイン メンバー コンピューターの certmgr.msc を見ると、[信頼されたルート証明機関] には、更新前の CA 証明書はあるが、更新後の新しい証明書は無い。(一つしか証明書がない)

しかし、[中間証明機関] には、元元の CA 証明書と更新された CA 証明書がある。

CA サーバーのイベント ログを見てみる。

下記のエラーが表示されており、権限不足が疑われる。

Active Directory 証明書サービスは要求 2 のための証明書をサーバー CONTOSO-DC01.corp.contoso.com の次の場所に公開できませんでした: CN=CONTOSO-DC01,OU=Domain Controllers,DC=corp,DC=contoso,DC=com。 この操作を実行するための十分なアクセス権がありません。 0x80072098 (WIN32: 8344 ERROR_DS_INSUFF_ACCESS_RIGHTS)。
ldap: 0x32: LDAP_INSUFFICIENT_RIGHTS: 00002098: SecErr: DSID-031514B3, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0

また、下記のイベント ログも記録されている。

Active Directory 証明書サービス CONTOSO-CA の証明書 (#1) が Active Directory の構成コンテナーの CN=NTAuthCertificates,CN=Public Key Services,CN=Services にある証明書ストアにありません。 ディレクトリ レプリケーションは完了しない可能性があります。

ふむふむ、構成コンテナーに公開が失敗しているようだ。

Active Directory 証明書サービスにより、CA コンピューターにダウンロードされた信頼済みルート証明機関エンタープライズ ストアに、証明書チェーン 1 のルート証明書が追加されました。このストアは、次回のグループ ポリシー適用時に、Active Directory の証明機関コンテナーから更新されます。CA 証明書が Active Directory に正しく公開されていることを確認するには、次のコマンドを実行します: certutil -viewstore “ldap:///CN=CONTOSO-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=corp,DC=contoso,DC=com?cACertificate?base?objectClass=certificationAuthority” (コマンド実行時には引用符を含める必要があります)。ルート CA 証明書が存在しない場合は、ルート CA コンピューターで証明書コンソールを使用して証明書をファイルにエクスポートし、次のコマンドを実行して Active Directory に公開します: Certutil -dspublish %certificatefilename% Root

上記のイベント ログには答えが書かれていました。

下記のコマンドで確認してみます。

certutil -viewstore "ldap:///CN=CONTOSO-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=corp,DC=contoso,DC=com?cACertificate?base?objectClass=certificationAuthority"

通常は、二つ (元元の CA 証明書と更新した CA 証明書) が表示されるはずですが、1 つしか表示されませんでした。

<原因>

CA 証明書の書き換え作業に使用したアカウントには、Domain Admin および Enterprise Admin の権限が付与されていませんでした。

実際には、Domain Admins か Enterprise Admins のグループに入ったアカウントで CA 証明書の書き換え作業を実施する必要があります。(実際には、CA サーバーのローカルの管理者権限があれば作業は実施できてしまいますが、今回のような問題が発生します。)

<対処方法>

上記のトラブルシューティング フェーズでも記載がありましたが、コマンドを実行して、Active Directory に再度、CA 証明書を公開します。

※ 既に、CA 証明書を書き換え済みなので、その証明書を Active Directory に公開します。

  1. CA サーバーに、Domain Admins か Enterprise Admins のグループに参加している管理者アカウントでログオンします。
  2. [証明機関] (certsrv.msc) を開きます。
  3. 証明書の名前を選択し、右クリックにて、[プロパティ] を開きます。
  4. 証明書サーバーのプロパティが開くので、[全般] から、更新した CA 証明書 (最新のもの) を選択し、[証明書の表示] を選択します。
  5. [詳細] タブを選択し、[ファイルにコピー] を選択します。
  6. [証明書のエクスポート ウィザード] が開きますので、[次へ] を選択します。
  7. [DER encoded binary X.509] を選択し、[次へ] を選択します。
  8. [参照] から保存する先を選択し、[次へ] を選択します。
  9. 内容が正しい事を確認し、[完了] を選択します。
    これで、事前準備終わりです。

  10. コマンド プロンプトを管理者権限で開き、下記のコマンドを実行します。ちなみに、イベント ログには、[Certutil -dspublish %certificatefilename% Root] と記載がありますが、正しくは、[Certutil -dspublish %certificatefilename% RootCA] です。
    Certutil -dspublish New_CA_Certificate.cer RootCA

  11. その後、下記のコマンドをまた実行して、更新した CA 証明書があるかを確認します。
    certutil -viewstore "ldap:///CN=CONTOSO-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=corp,DC=contoso,DC=com?cACertificate?base?objectClass=certificationAuthority"

  12. その後、ドメイン メンバー コンピューター上で [gpupdate /force] を実行する事により、更新した CA 証明書が [信頼されたルート証明機関] に入ってきます。

<まとめ、考察>

今回、証明書サーバーの CA 証明書の更新の際に問題に遭遇しましたが、組織によって管理アカウントへの権限付与を厳格化している場合は、特に注意が必要です。

確かに、よく考えれば、Domain Admin または Enterprise Admin の権限が必要であることは分かりますが、実際には操作途中にエラーは表示が無く、イベント ログだけに警告として記録されます。そのため、発見が遅れる可能性もあります。皆さんも、CA 証明書を更新する際は是非、権限については注意ください。