Windows Server 2025でActive Directory環境を作ってみた。
フォレスト/機能レベルはWindows Server 2016とした
この環境に対してAlmaLinux 9で作ったサーバから ldapsearchコマンドを実行したところ「ldap_bind: Strong(er) authentication required (8)」というエラーになった
# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード" -H ldap://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
ldap_bind: Strong(er) authentication required (8)
additional info: 00002028: LdapErr: DSID-0C0903CB, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v65f4
#
セキュリティ強化のためLDAP署名もしくはLDAPSに対応していないとダメになったようだ
「[AD管理者向け] 2020 年 LDAP 署名と LDAP チャネルバインディングが有効化。確認を!」
(上記ページ内でリンクされてるアドバイザリの正しいURL→「LDAP チャネル バインディングと LDAP 署名を有効にするためのマイクロソフト ガイダンス」)
じゃあ、とldapsでアクセスしてみるがエラー
# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード -H ldaps://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
#
デバッグモードで接続のテストだけ行ってみる
# ldapsearch -x -d -1 -H ldaps://192.168.122.10
ldap_url_parse_ext(ldaps://192.168.122.10)
ldap_create
ldap_url_parse_ext(ldaps://192.168.122.10:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 192.168.122.10:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 192.168.122.10:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect:
connect success
TLS trace: SSL_connect:before SSL initialization
tls_write: want=302 error=Connection reset by peer
TLS trace: SSL_connect:error in SSLv3/TLS write client hello
TLS: can't connect: .
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
#
証明書が設定されてないようだ
確認のためopenssl s_clientでも接続を試みる
# openssl s_client -connect 192.168.122.10:636
Connecting to 192.168.122.10
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 302 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
#
接続できない
公式のドキュメントとしては「Active Directory Domain Services で SSL 経由で LDAP の証明書を構成する」となる。
この手順はすでにSSL証明書が発行され、Windows Serverに登録されている状態で行う手順となっている。このため、SSL証明書が用意されていない状態からの手順ではない。
自己証明書を作成してLDAP証明書とする、という手順は、DELLのサイトにある「Active Directory統合用にLDAPSを構成する方法」が大変わかりやすく作成されていたので、これを利用する。
まず、Active Directoryサーバにログインして、「ldp.exe」を実行し、接続先としてドメイン名、ポート389、SSLチェックは無しを指定して接続を試みる
これはldapでの接続テストとなる。

下記のように情報が取れれば問題ない

次にldapsでの接続をテストするため、SSLにチェックを入れ、ポート636で接続する


接続ができない、というエラーとなった。
このため、証明書の作成が必要、ということになる。
作成にはPowerShellから「New-SelfSignedCertificate -DnsName adtest.adsample.local,adtest -CertStoreLocation cert:\LocalMachine\My」を実行する
追記:「New-SelfSignedCertificate -DnsName adtest.adsample.local,adtest -CertStoreLocation cert:\LocalMachine\My -NotAfter (Get-Date).AddMonths(36)」で証明書の期限切れまで36ヶ月と設定した方がよい
-DnsNameの後ろは、Active DIrectoryサーバのFQDNとショートホスト名の2種類をカンマ区切りで指定する

これを実行すると「certlm.msc」の[個人]-[証明書]に証明書が発行される

注意点としては、証明書の有効期限が1年間となっているので、1年以内に更新する必要がある、という点。
期間を変更する場合、New-SelfSignedCertificateの-NotAfterオプションに終了日を指定する。
試してないがおそらく 「-NotAfter (Get-Date).AddMonths(36)」で3年間が作れた
この証明書を右クリックメニューのコピーをして

[信頼されたルート証明機関]-[証明書]にペースト


再度 ldp.exeから、ポート636, SSLチェックありで接続を試みて接続に成功することを確認

再びLinux側に戻って、まずはopenssl s_clientでの確認
# openssl s_client -connect 192.168.122.10:636
Connecting to 192.168.122.10
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN=adtest.adsample.local
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN=adtest.adsample.local
verify return:1
---
<略>
Start Time: 1744940383
Timeout : 7200 (sec)
Verify return code: 18 (self-signed certificate)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
^C
#
証明書が設定されたことを確認できた。
改めてldapsearchを実行して、情報が取得できることを確認した
# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード" -H ldaps://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
# extended LDIF
#
# LDAPv3
# base <CN=testuser1,CN=Users,DC=adsample,dc=local> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
matchedDN: CN=Users,DC=adsample,DC=local
text: 0000208D: NameErr: DSID-0310028F, problem 2001 (NO_OBJECT), data 0, best
match of:
'CN=Users,DC=adsample,DC=local'
# numResponses: 1
#
参考:Microsoft手順について
「Active Directory Domain Services で SSL 経由で LDAP の証明書を構成する」の手順ですが、これは証明書が発行され、Windows Serverに登録されている状態で、それをLDAPの証明書として利用するための手順となっている。
このため、自己証明書を作成するところについては書かれていない。
なので、証明書がなにもない状態で手順を行うと下記の様になる。
certlm.msc を実行

[個人]の下で右クリックメニューから[すべてのタスク]-[新しい証明書の要求]を選択

ウィザードを進める

[システム管理者が構成します]-[Active Directory登録ポリシー]を選択し、[次へ]をクリック

登録出来る証明書がない、として終了する

次に、PowerShell 管理者モードで New-SelfSignedCertificateを実行して証明書作成した場合にどうなるか確認

PS C:\Users\Administrator> New-SelfSignedCertificate -DnsName adtest.samplead.local,adtest -CertStoreLocation cert:\LocalMachine\My -NotAfter (Get-Date).AddMonths(36)
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
---------- -------
809CEEBEF846D500F60FF6298C6046AD3183CB9E CN=adtest.samplead.local
PS C:\Users\Administrator>
[個人]-[証明書]が作成される

左側の[個人]-[証明書]のアイコンの右クリックメニューから[すべてのタスク]-[新しい証明書の要求]を選択




やっぱりダメ
次に右側の登録されている証明書の右クリックメニューから[すべてのタスク]-[新しいキーで証明書を要求]を選択



ダメ
「Active Directory Domain Services で SSL 経由で LDAP の証明書を構成する」の「サードパーティーCA」の「証明書をインストールする」を見てみると、[個人]-[証明書]にある証明書があればいいように見える
しかし、いま登録されている証明書は下記の状態となっている

目的に「サーバー認証」は含まれている

しかし、証明書の状態は「信頼されたルート証明書機関のストア」にないのでダメ、ということになっている


いまの状態でldapsearchでどうなるかを確認すると、証明書がないのでエラーになっている
[root@xxxxx ~]# ldapsearch -x -H ldaps://192.168.1.77 -D "CN=administrator,CN=Users,DC=samplead,DC=local" -w "xxxxx" -b "CN=Users,DC=samplead,DC=local" "" samaaccountname
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
[root@xxxxx ~]#
ということで、これを信頼済みにするにはDELL手順にあるように[個人]-[証明書]の下にある証明書の右クリックメニューから[コピー]を選び

[信頼されたルート証明機関]-[証明書]の右クリックメニューから[貼り付け]を選んで、証明書をコピー

コピーされたことを確認

証明書はコピーした後の目的表示については変化なし

ルート証明機関に関するエラーがないことを確認


この後にldapsearchを実行すると実行ができる
[root@xxxxx ~]# ldapsearch -x -H ldaps://192.168.1.77 -D "CN=administrator,CN=Users,DC=samplead,DC=local" -w "xxxxx" -b "CN=Users,DC=samplead,DC=local" "" samaaccountname
# extended LDIF
#
# LDAPv3
# base <CN=Users,DC=samplead,DC=local> with scope subtree
# filter: (objectclass=*)
# requesting: samaaccountname
#
# Users, samplead.local
dn: CN=Users,DC=samplead,DC=local
# DnsUpdateProxy, Users, samplead.local
dn: CN=DnsUpdateProxy,CN=Users,DC=samplead,DC=local
# DnsAdmins, Users, samplead.local
dn: CN=DnsAdmins,CN=Users,DC=samplead,DC=local
# Administrator, Users, samplead.local
dn: CN=Administrator,CN=Users,DC=samplead,DC=local
# Guest, Users, samplead.local
dn: CN=Guest,CN=Users,DC=samplead,DC=local
# krbtgt, Users, samplead.local
dn: CN=krbtgt,CN=Users,DC=samplead,DC=local
# Domain Computers, Users, samplead.local
dn: CN=Domain Computers,CN=Users,DC=samplead,DC=local
# Domain Controllers, Users, samplead.local
dn: CN=Domain Controllers,CN=Users,DC=samplead,DC=local
# Schema Admins, Users, samplead.local
dn: CN=Schema Admins,CN=Users,DC=samplead,DC=local
# Enterprise Admins, Users, samplead.local
dn: CN=Enterprise Admins,CN=Users,DC=samplead,DC=local
# Cert Publishers, Users, samplead.local
dn: CN=Cert Publishers,CN=Users,DC=samplead,DC=local
# Domain Admins, Users, samplead.local
dn: CN=Domain Admins,CN=Users,DC=samplead,DC=local
# Domain Users, Users, samplead.local
dn: CN=Domain Users,CN=Users,DC=samplead,DC=local
# Domain Guests, Users, samplead.local
dn: CN=Domain Guests,CN=Users,DC=samplead,DC=local
# Group Policy Creator Owners, Users, samplead.local
dn: CN=Group Policy Creator Owners,CN=Users,DC=samplead,DC=local
# RAS and IAS Servers, Users, samplead.local
dn: CN=RAS and IAS Servers,CN=Users,DC=samplead,DC=local
# Allowed RODC Password Replication Group, Users, samplead.local
dn: CN=Allowed RODC Password Replication Group,CN=Users,DC=samplead,DC=local
# Denied RODC Password Replication Group, Users, samplead.local
dn: CN=Denied RODC Password Replication Group,CN=Users,DC=samplead,DC=local
# Read-only Domain Controllers, Users, samplead.local
dn: CN=Read-only Domain Controllers,CN=Users,DC=samplead,DC=local
# Enterprise Read-only Domain Controllers, Users, samplead.local
dn: CN=Enterprise Read-only Domain Controllers,CN=Users,DC=samplead,DC=local
# Cloneable Domain Controllers, Users, samplead.local
dn: CN=Cloneable Domain Controllers,CN=Users,DC=samplead,DC=local
# Protected Users, Users, samplead.local
dn: CN=Protected Users,CN=Users,DC=samplead,DC=local
# Key Admins, Users, samplead.local
dn: CN=Key Admins,CN=Users,DC=samplead,DC=local
# Enterprise Key Admins, Users, samplead.local
dn: CN=Enterprise Key Admins,CN=Users,DC=samplead,DC=local
# \E3\83\95\E3\82\A9\E3\83\AC\E3\82\B9\E3\83\88\E4\BF\A1\E9\A0\BC\E3\82\A2\E3\8
2\AB\E3\82\A6\E3\83\B3\E3\83\88\20, Users, samplead.local
dn:: Q04944OV44Kp44Os44K544OI5L+h6aC844Ki44Kr44Km44Oz44OIXCAsQ049VXNlcnMsREM9c
2FtcGxlYWQsREM9bG9jYWw=
# \E5\A4\96\E9\83\A8\E4\BF\A1\E9\A0\BC\E3\82\A2\E3\82\AB\E3\82\A6\E3\83\B3\E3\8
3\88\20, Users, samplead.local
dn:: Q0495aSW6YOo5L+h6aC844Ki44Kr44Km44Oz44OIXCAsQ049VXNlcnMsREM9c2FtcGxlYWQsR
EM9bG9jYWw=
# search result
search: 2
result: 0 Success
# numResponses: 27
# numEntries: 26
[root@xxxxx ~]#














































































