web-dev-qa-db-ja.com

疎ネットワークでの「Kerberos認証」証明書の登録エラー

現在、ネットワークが完全に接続されていないお客様のために、エンタープライズ証明機関の実装に取り​​組んでいます。複数の地理的なサイトにまたがっており、CAが配置されているサイトへのルーティングがないサイトもあります。

これを回避するために、 Certificate Enrollment Web Service を使用しました。これにより、HTTPS経由での証明書の登録が可能になります。サービスはパブリック名とIPアドレスを介して公開され、リモートサイトのコンピューターはこの方法でアクセスできます。

このソリューションは、あらゆる種類の証明書に最適です。ただし、リモートサイトのドメインコントローラーは、テンプレート「Kerberos認証」を使用して証明書を取得できません(自動認証が有効になっている場合、最近のDCはこれを使用しようとします)。エラーは一般的な「RPCサーバーを利用できません」ですが、CA自体で発生します 、失敗したリクエストにログインします。

これは、ネットワークトラフィックを調べることにするまで、しばらく戸惑いました。驚いたことに、テンプレート「Kerberos Authentication」を使用して証明書を要求すると、CAがドメインコントローラに接続しようとします。リクエストを行いました。これはお客様のネットワークでは不可能であり、リクエストが失敗した理由のようです。

CAは、証明書を要求しているコンピューターが実際にドメインコントローラーであることを検証しようとしていると思います。ただし、これに関するドキュメントは見つかりませんでした。そのような「コールバック」は、証明書要求のクライアント/サーバーロジックに反するようです。

この動作はどこかに文書化されていますか?

オフにできますか?

O.S. CAにはWindows Server 2019があります。


編集する

ADフォレストには4つのドメインがあります。 CAはフォレストルートドメインにあります。
動作はすべてのドメインのすべてのDCで同じです。手動または自動登録を介して「Kerberos認証」証明書が要求されると、CAは要求しているDCポート445および139で(奇妙なことに、実際のLDAP、Kerberos、またはRPCトラフィックはありません);これが失敗すると、リクエストは「ポリシーモジュールによって拒否されました」というエラーとステータスコード「RPCサーバーは利用できません。」.

これは「Kerberos認証」証明書でのみ発生します。 「ドメインコントローラー認証」や「ディレクトリ電子メールレプリケーション」など、他のすべての証明書はCES経由で正常に登録できます。

また、実際にCAと通信できるDCについてもテストしました。DCからCAへのトラフィックがブロックされている場合、CESを使用するように要求を強制しますが、その逆ではありません。要求は成功しますが、CAからDCへのトラフィックがブロックされると、要求は失敗します。

5
Massimo

ドキュメントによると、あなたが直面している動作は仕様によるものであり、オフにすることはできません。 Kerberos Authenticationには、CAからDCへのRPC接続が必要です。あなたのためのオプションは何ですか?

  1. CAとドメインコントローラー間のRPC通信を有効にします。
  2. Domain Contoller Authenticationテンプレートの代わりにKerberos Authentication証明書テンプレートを使用します。 Domain Contoller Authenticationテンプレートは、DCへのRPC接続を必要としません。

実際、私はあなたがすべての詳細と称賛を覚えていなかった、あなたは良い調査をして、失敗したRPCコールバックについて指摘した、これは本当に考えられる理由の量を減らした。これが発生する理由の詳細は以下のとおりです。


TL; DR

パート1

まず、証明書テンプレートについて:Domain Controller AuthenticationKerberos Authenticationテンプレートの両方を使用して、LDAP[〜#〜] s [〜#〜](LDAP over TLS)および証明書/ smarカードのログオン時の相互認証。

2つの違いは、サブジェクトの構成方法、またはそこに含まれるものです。 Domain Controller Authenticationは、ドメインコントローラのFQDNをSAN拡張のみに含めます。Kerberos Authenticationは、ドメインのFDQNおよびNetBIOS名をさらに2つ追加します。さらに、Kerberos Authenticationは、 KDC Authentication EKU。デフォルトのテンプレート構成は [MS-CRTD]、付録A で定義されています。

  • Domain Controller Authenticationサブジェクト名には134217728(0x8000000)のフラグの組み合わせがあり、これはフラグのみに変換されます:CT_FLAG_SUBJECT_ALT_REQUIRE_DNS

  • Kerberos Authenticationサブジェクト名には138412032(0x8400000)フラグの組み合わせがあり、これはCT_FLAG_SUBJECT_ALT_REQUIRE_DNSおよびCT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNSの2つのフラグに変換されます。

サブジェクト名フラグはmsPKI-Certificate-Name-Flag属性に格納されます( [MS-CRTD]§2.28 )。

質問の問題は、SANにドメインFQDNとNetBIOS名を含める必要があるために発生します。Kerberos Authenticationテンプレートは、CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNSフラグを使用する唯一のデフォルトテンプレートです。

パート2

Windows CAは [MS-WCCE] プロトコル仕様を使用して、要求を処理し、証明書を発行します。このプロトコルは、クライアントの動作と、Windows CAの相互作用および動作の一部を完全に指定します。 [MS-WCCE]§3.2.2.1. は、ドメインコントローラーであるクライアントの特別な動作を定義し、名前の先頭に「\\」を付けることで、RPC接続の準備ができるようにクライアントの名前を準備します。

パート3

Windows CAは [MS-WCCE]§3.2.2.6.2.1.4.5.9 で指定されているCT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNSを処理します。

CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNSフラグが設定されている場合、CAは以下を行う必要があります。

  • CAは、SystemNameパラメータをdNSHostName属性、ObjectAttributesのすべてのフィールドはNULLに設定され、DesiredAccessパラメーターはPOLICY_VIEW_LOCAL_INFORMATIONに設定されます。
  • CAは、LsarQueryInformationPolicyパラメータを使用してPolicyHandleメソッド( [MS-LSAD]セクション3.1.4.4.4 )を使用して、リクエスタのコンピュータのDNSドメイン情報を取得する必要があります(SHOULD)。前の手順で取得した値に設定し、InformationClassパラメータをPolicyDnsDomainInformationに設定します。
  • CAは、前の手順で返されたDNSドメイン情報のNameおよびDNSDomainNameフィールドの値を、発行された証明書のサブジェクトの別名拡張に追加する必要があります。

ご覧のとおり、LsarOpenPolicy呼び出しは実際にはRPC呼び出しであり、成功するとRPC接続へのハンドルを返します。あなたの場合、この呼び出しは失敗し、CAは、証明書に挿入するために必要な名前を取得するためにLsarQueryInformationPolicy(これもRPC呼び出しです)を呼び出すことができません。

ボトムライン

Kerberos AuthenticationテンプレートでドメインFQDNとドメインNetBIOS名をオフにする必要があるかもしれませんが、これはお勧めしません。 KDC AuthenticationDomain Controller Authentication EKUを追加しようとすることもありません。最初にドメインFQDNとNetBIOの存在に厳密に依存しているため、環境で問題が発生するためです。

5
Crypt32

RPCコールをバイパスしてDCに戻すには、Kerberosテンプレートを複製して、SANを手動で追加し、自動更新を有効にします。

手順は次のとおりです-

テンプレートの設定:

  1. kerberosテンプレートを複製する

  2. 新しいテンプレートのサブジェクト名を「リクエストで提供」に構成します

  3. dCに新しいテンプレートの読み取りと登録のアクセス許可を与える
  4. 必要に応じて、古いテンプレートを置き換えることができます
  5. テンプレートを公開する

WESで:

テンプレートリストを更新するためのiisreset

証明書を登録します:

分離されたDCで証明書を登録し、ドメイン名をSAN拡張子に追加します(これにより、CAからDCへのRPCコールバックは行われません)。 。

(テンプレートが表示されない場合は、C:\ ProgramData\Microsoft\Windows\X509EnrollmentのローカルWESキャッシュをクリアしてください)

GPOを介して自動更新を有効にする):

Windowsの設定>セキュリティの設定>公開キーのポリシー>証明書サービスクライアント-自動登録。 「期限切れの証明書の更新、保留中の証明書の更新、および失効した証明書の削除」のみをマークするだけで十分です

自動更新のテスト:

新しいテンプレート-右クリックして[すべての証明書保有者を再登録]を選択します。これにより、テンプレートのメジャーバージョンが増加し、次の自動登録サイクル(8時間に1回)で証明書が強制的に更新されます。

待機したくない場合は、WESをiisresetし、ローカルのx509enrollmentフォルダーを削除して、「certutil -Pulse」を実行します。

幸運を

1
CryptoDan