現在、ネットワークが完全に接続されていないお客様のために、エンタープライズ証明機関の実装に取り組んでいます。複数の地理的なサイトにまたがっており、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へのトラフィックがブロックされると、要求は失敗します。
ドキュメントによると、あなたが直面している動作は仕様によるものであり、オフにすることはできません。 Kerberos Authentication
には、CAからDCへのRPC接続が必要です。あなたのためのオプションは何ですか?
Domain Contoller Authentication
テンプレートの代わりにKerberos Authentication
証明書テンプレートを使用します。 Domain Contoller Authentication
テンプレートは、DCへのRPC接続を必要としません。実際、私はあなたがすべての詳細と称賛を覚えていなかった、あなたは良い調査をして、失敗したRPCコールバックについて指摘した、これは本当に考えられる理由の量を減らした。これが発生する理由の詳細は以下のとおりです。
まず、証明書テンプレートについて:Domain Controller Authentication
とKerberos 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
フラグを使用する唯一のデフォルトテンプレートです。
Windows CAは [MS-WCCE] プロトコル仕様を使用して、要求を処理し、証明書を発行します。このプロトコルは、クライアントの動作と、Windows CAの相互作用および動作の一部を完全に指定します。 [MS-WCCE]§3.2.2.1. は、ドメインコントローラーであるクライアントの特別な動作を定義し、名前の先頭に「\\」を付けることで、RPC接続の準備ができるようにクライアントの名前を準備します。
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)。前の手順で取得した値に設定し、InformationClas
sパラメータをPolicyDnsDomainInformation
に設定します。- CAは、前の手順で返されたDNSドメイン情報の
Name
およびDNSDomainName
フィールドの値を、発行された証明書のサブジェクトの別名拡張に追加する必要があります。
ご覧のとおり、LsarOpenPolicy
呼び出しは実際にはRPC呼び出しであり、成功するとRPC接続へのハンドルを返します。あなたの場合、この呼び出しは失敗し、CAは、証明書に挿入するために必要な名前を取得するためにLsarQueryInformationPolicy
(これもRPC呼び出しです)を呼び出すことができません。
Kerberos Authentication
テンプレートでドメインFQDNとドメインNetBIOS名をオフにする必要があるかもしれませんが、これはお勧めしません。 KDC Authentication
にDomain Controller Authentication
EKUを追加しようとすることもありません。最初にドメインFQDNとNetBIOの存在に厳密に依存しているため、環境で問題が発生するためです。
RPCコールをバイパスしてDCに戻すには、Kerberosテンプレートを複製して、SANを手動で追加し、自動更新を有効にします。
手順は次のとおりです-
テンプレートの設定:
kerberosテンプレートを複製する
新しいテンプレートのサブジェクト名を「リクエストで提供」に構成します
WESで:
テンプレートリストを更新するためのiisreset
証明書を登録します:
分離されたDCで証明書を登録し、ドメイン名をSAN拡張子に追加します(これにより、CAからDCへのRPCコールバックは行われません)。 。
(テンプレートが表示されない場合は、C:\ ProgramData\Microsoft\Windows\X509EnrollmentのローカルWESキャッシュをクリアしてください)
GPOを介して自動更新を有効にする):
Windowsの設定>セキュリティの設定>公開キーのポリシー>証明書サービスクライアント-自動登録。 「期限切れの証明書の更新、保留中の証明書の更新、および失効した証明書の削除」のみをマークするだけで十分です
自動更新のテスト:
新しいテンプレート-右クリックして[すべての証明書保有者を再登録]を選択します。これにより、テンプレートのメジャーバージョンが増加し、次の自動登録サイクル(8時間に1回)で証明書が強制的に更新されます。
待機したくない場合は、WESをiisresetし、ローカルのx509enrollmentフォルダーを削除して、「certutil -Pulse」を実行します。
幸運を