AD DS(ADドメインコントローラ)でLDAPSを使えるようにしてみる with AD CS Enterprise CA

どうも、Tです。

AD DS(Active Directory Domain Services )とLDAPS通信を行えるようにしたので備忘録です。

スポンサーリンク
アドセンス1

ここでの結論

LDAPSを長期間使用する方法としては、下記2つの方法になりそうです。

  1. デフォルトで配布されるドメインコントローラーテンプレートの有効期限を延ばして証明書を入れ替える
  2. 新しいテンプレート(有効期限が長い)から証明書を作成して、作成した証明書を使う(本手順で説明している方法)

デフォルトで用意されているドメインコントローラーの認証かKerberos認証テンプレートの有効期限だけ変更する方法が圧倒的に簡単だった・・・(検証終わった後に気づいた)

やりたいこと

AD DSとLDAPS通信を行えるようにしたい。

なんでLDAPS?

1年ほど前に、Microsoftさんがセキュリティ強化のためにLDAPの通信方法変えちゃうから!アップデートで強制的にかえるからよろしくね!と発表しました。

Security Update Guide - Microsoft Security Response Center

結局のところ、AD側のアップデートで強制的に変更される仕様は見送られたのですが、今のままでは脆弱性が残ることになります。

そして、ADとLDAP通信を行うサードパーティソフトがこぞってLDAPS(LDAP over SSL/TLS)へ誘導しているように感じられます。

今後、AD連携には、AD LDAPSが必要なことが多くなりそうなので、検証環境を構築してみました。

環境

下記のような構成で行っています。AD DSは確認だけなら1台でも大丈夫なのですが、複数ある場合のテストがしたなかったので複数用意しました。

  • AD DS:Windows Server2019(1台目ホスト名:testad、2台目ホスト名:testad2)
  • AD CS(エンタープライズCA&Web登録):Windows Server2019
  • 確認用クライアント:Windows Server2019

AD CSの構築方法は、下記にまとめました。

Active Directory証明書サービス(AD CS)でオレオレ認証局(エンタープライズCA)を構築する
どうも、Tです。 急遽、証明書機関が必要になったので、Active Directory証明書サービス(AD CS)を使えるようにしてみ...
Active Directory証明書サービス(AD CS)に証明機関Web登録を追加する(CAと同居構成)
どうも、Tです。 先日、AD CSをインストールしましたが、Webブラウザから証明書発行のリクエストを行えるようにWeb登録機能を追加...

AD CSを使わなくとも、ADサーバー自身の自己署名・サードパーティCA(OpenSSLとか)でもできるそうですが、今回はAD CSで。

AD DSのLDAPS設定

前提

AD CS構築済みの場合、AD LDAPSは既に使える

LDAPS(LDAP over SSL/TLS)いうように、AD DSに対してのLDAPS接続には、SSL通信を行うための証明書を準備する必要があります。今回は証明書発行のためのCAとしてAD CSを準備していますが、AD CSをエンタープライズCAで構成するとADとのLDAPS通信は行えるようになります。

Active Directory証明書サービス(AD CS)でオレオレ認証局(エンタープライズCA)を構築する
どうも、Tです。 急遽、証明書機関が必要になったので、Active Directory証明書サービス(AD CS)を使えるようにしてみ...

ADドメインコントローラーだけに対して自動配布される証明書があります。(正確には、AD CSが配布しているわけではなく、ADがWindowsタスクスケジューラで証明書要求をしています。)

ADドメインコントローラーの個人証明書ストアを見ると証明書が作成されます(即時作成さされません。詳細は後述。)。これは、AD CSのデフォルトで用意されているテンプレート「ドメインコントローラー」の証明書になります。有効期限が1年ですが、これも後述の理由により自動更新されます。

ldp.exeを実行して、LDAPS通信を行う下記でOKをクリックしてみます。

エラーなくLDAPS通信が行えています。

AD CSから配布されるデフォルトの証明書を利用してはいけない理由

AD CSをエンタープライズCAで構成するとAD DSの個人ストアに、「ドメインコントローラ」テンプレートで配布される証明書があるため、LDAPS通信が行えています。

AD DSにAD CSをインストールした(同居構成)なら、このようになるとの記事もありますが、AD CSを別建てした場合もこのような構成になります。また、AD DSにAD CSをインストールすることは、AD DSの移行などの問題となるため、同居構成は避けるようにしましょう。

ただ、このままの状態で使用してはいけない場合があります。この証明書は有効期限が1年で有効期限近くになると自動的に証明書に更新(別の証明書)されます。グループポリシーなど、Windowsクライアントなどに対して、自動配布するようなものは大丈夫かもしれませんが、この証明書を手動で取り込んで利用するようなアプライアンスなどは、1年もたずにLDAPS通信が行えなくなります。(手動で取り込んだ証明書が使えなくなるため)

ということで、LDAPS通信に必要な長期間有効な証明書を下記の「Enabling LDAPS for domain controllers using a multi-tier CA hierarchy」参考に作成していきます。※多層CA構成ではないですが、これしか参考がなかった・・・・。

LDAP over SSL (LDAPS) Certificate - TechNet Articles - United States (English) - TechNet Wiki
Technical articles, content and resources for IT Professionals working in Microsoft technologies

AD CSのテンプレート作成(サーバー認証必須)

この操作は、AD CSサーバーで行います。

AD CSにログインして、サーバーマネージャーから「ツール」->「証明機関」をクリックします。

「証明書テンプレートを右クリック」->「管理」をクリックします。

「Kerberos認証を右クリック」->「テンプレートの複製」をクリックします。

テンプレートの選択は、Kerberos認証ではんくともドメインコントローラー、ドメインコントローラー認証、Webサーバー、コンピュータなどを使用しても使えます。要は証明書の利用用途に「サーバー認証」が入っていればよいのですが、Kerberos認証を積極に使った方がよいことが、下記のサイトで説明されています。簡単に説明するとKerberos認証テンプレートは、一番新しく用意されているテンプレートで、サーバー認証以外の用途にも幅広く使えるものであるということです。

LDAPS / Domain Controller Certificates
Background and References So, today I’m going to discuss implementing certificates for Secure LDAP on Active Directory Domain Controllers. First of all, some he...

互換タブ

互換性タブの中を設定していきます。

ここは、デフォルトで設定されいてるWindows Server2003から変更しないようにとのことです。

全般タブ

全般タブを設定します。

  • テンプレート表示名:わかりやすい任意の名前を入力
  • 有効期限:置き換えるVMCAルート証明書の有効期限(任意で設定)

要求処理タブ

要求処理タブを設定します。

「秘密キーのエクスポートを許可する」にチェックを入れます。

サブジェクト名タブ

「DNS名」と「サービスプリンシパル名」にチェックが入っていることを確認します。デフォルトで「サービスプリンシパル名」にチェックは入っていません。

「OK」をクリックして保存します。

テンプレートが作成されました。

AD CSの認証テンプレートに追加

作成してテンプレートを使えるように証明書テンプレートに追加していきます。

「証明書テンプレートを右クリック」->「新規作成」->「発行する証明書テンプレート」をクリックします。

リストの中から作成した証明書テンプレートを選択し「OK」をクリックします。

証明書テンプレートの中に追加されたことを確認します。これで証明書テンプレートとして使えるようになりました。

AD DSから証明書要求(AD DS2台ともで実施)

ここからの操作は、AD DSで行います。

「ファイル名を指定して実行」->「mmc」で「OK」をクリックします。

「ファイル」->「スナップインの追加と削除」をクリックします。

「証明書」を選択して「追加」をクリックします。

「コンピュータアカウント」を選択して「追加」をクリックします。

「ローカルコンピューター」を選択して「完了」をクリックします。

スナップインに追加されたことを確認して「OK」をクリックします。

「証明書(ローカルコンピューター)」->「個人」->「証明書」->「新しい証明書の要求」をクリックします。

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

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

先ほど作成した証明書テンプレートにチェックをつけて「登録」をクリックします。

成功したことを確認して「完了」をクリックします。

新しい証明書が作成されました。有効期限も指定した年数になっています。

作成された証明書を右クリックして「開く」をクリックします。

「詳細タブ」->「拡張キー使用法」の中に「サーバ認証(1.3.6.1.5.5.7.3.1)」が存在することを確認します。LDAPS通信を行うためには、このサーバー認証が設定されている必要があります。

もう1台のAD DSでも同様の手順で証明書を発行します。AD DSの2台ともでそれぞれの証明書が作成されました。

LDAPS確認(AD DS2台ともで実施)

「ファイル名を指定して実行」->「ldp」で「OK」をクリックします。

「接続」->「接続」をクリックします。

それぞれの値を入力して、「OK」をクリックします。

  • サーバー:LDAPS通信をする試すホストFQDN
  • ポート:636
  • SSL:チェックあり

エラーがないことを確認します。

すべてのAD DSでテストが完了すれば、AD DSとLDAPS通信が行える環境が準備できました。

AD DS over LDAPの注意事項

2点ほど知っていた方がいい仕様がありましたが、あまり情報がなかったので記載しておきます。下記URLから引用していきます。

LDAP over SSL (LDAPS) Certificate - TechNet Articles - United States (English) - TechNet Wiki
Technical articles, content and resources for IT Professionals working in Microsoft technologies

AD DSの個人ストアでサーバー認証に使えるは1つのみ

下記の記載があります。サーバー認証に使う証明書があった場合、1つの証明書しか使わないため、「サーバー認証」に配置する証明書ファイルは1つのみにしてください。ということです。

When a certificate is selected from the local machine store (as in CertEnumCertificatesInStore Jump ) the first valid certificate that can be used for Server Authentication (OID: 1.3.6.1.5.5.7.3.1) is returned for use. In cases where customers have multiple certificates valid for Server Authentication in the LDAP server’s (e.g. AD DS domain controller Jump , AD LDS Jump , or ADAM Jump server) local computer certificate store, may see that a different certificate than the one they want is used for LDAPS communications. The best resolution to such an issue is to remove all unnecessary certificates from the local computer certificate store and have only one certificate that is valid for server authentication.

今回の例でいうと、サーバー認証で使う証明書は、「元々存在するドメインコントローラーテンプレートで作成された証明書」と「手動で作成したテンプレートで作成された証明書」の2つが存在します。この場合、片方しか使わないから良くないといっています。

回避方法は?

これを回避するには、下記のどちらかになります。

  1. AD DSの個人ストアから不要なサーバー認証の証明書を削除する
  2. NTDSの個人ストアに証明書を配布する(後述する)

まず削除する方法ですが、このドメインテンプレート証明書ですが、手動で削除してもWindowsタスクスケジューラ(CertificateServicesClient)によって自動的に再生成されます。

※詳細は、下記をご確認ください。

Active Directory証明書サービス(AD CS)でオレオレ認証局(エンタープライズCA)を構築する
どうも、Tです。 急遽、証明書機関が必要になったので、Active Directory証明書サービス(AD CS)を使えるようにしてみ...

削除するとすれば、下記の手順で削除は行えました。

  1. AD CSからドメインテンプレートを削除する
  2. 各AD DSからドメインテンプレートで作成された証明書を削除する

どのサーバー認証のある証明書を使うのか?

しかし、元々配布されてしまい、Windowsタスクスケジューラで作成されるものを削除してしまうのはちょっと嫌な気持ちになったので、サーバー認証の証明書が複数あった場合どちらが使われるのか調べてみました。

WindowsServer2008からは、証明書の有効期限が最も遠い未来にある証明書を自動的に選択して使うということです。

Enable Lightweight Directory Access Protocol (LDAP) over Secure Sockets Layer (SSL) - Windows Server
Describes how to enable LDAP over SSL with a third-party certification authority.

Finally, if a Windows Server 2008 or a later version domain controller finds multiple certificates in its store, it automatically selects the certificate whose expiration date is furthest in the future. Then, if your current certificate is approaching its expiration date, you can drop the replacement certificate in the store, and AD DS automatically switches to use it.

あまり元の環境から削除や構成変更はしたくない場合、利用する証明書の有効期限を長いスパン(10年や20年)で取っておけば問題なさそうです。

NTDSの個人ストアに証明書を配布することもできる(Windows Server2008以降)

Windows Server2008以降であれば、先ほどのURLの中の「Exporting the LDAPS Certificate and Importing for use with AD DS」を実施することにより、NTDSを使って複数の証明書を配置することができるようです。※未検証

ただ、下記のような記載もあるため、極力使用しない方が無難かなと思いました。

LDAP over SSL (LDAPS) Certificate - TechNet Articles - United States (English) - TechNet Wiki
Technical articles, content and resources for IT Professionals working in Microsoft technologies

Important: You should be planning on having only one certificate on each LDAP server (i.e. domain controller or AD LDS computer) with the purpose of Server Authentication. If you have legitimate reasons for using more than one, you may end up having certificate selection issues, which is discussed further in the Active Directory Domain Services Certificate Storage.

参考

LDAP over SSL (LDAPS) Certificate - TechNet Articles - United States (English) - TechNet Wiki
Technical articles, content and resources for IT Professionals working in Microsoft technologies

まとめ

なかなかにめんどくさい。

2021年9月17日追記

AD CSを使わずにPowerShellを使った自己署名証明書でLDAPS通信を行う方法をまとめてみました。

AD DS(ADドメインコントローラ)でLDAPSを使えるようにしてみる with PowerShell(自己署名証明書)
どうも、Tです。 以前AD CSを使ってAD DSでLDAPS通信する方法を行いましたが、AD CSが準備できないパターンも往...

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする