php2shellのパッチをダウンロードするためにONTAPのダウンロードページにアクセスしたら、phpに関する警告の他に、下記の警告も出ていた
AD-LDAP Authentication Errors After Microsoft October 2026 DC Patch Updates
Microsoft October 2026 domain controller (DCs) patches may affect AD-LDAP authentication requests from ONTAP to DCs resulting in protocol outrages or login disruptions. See SU628 for more details.
Active DirectoryサーバをLDAPサーバとして利用している場合、2026年10月のWindows Updateにより、平文のLDAPアクセスが禁止され、署名ありのLDAPアクセスもしくはLDAPSアクセスが必須となる、という話だった
具体的なWindows Server側のパッチ
Windows Server 2025 KB5126646
Windows Server 2022 KB5126655
Windows Server 2019 KB5126651
Windows Server 2016 KB5126868
基本的に、Windows Server側に適用されたセキュリティ強化設定を解除することはできない
Windows Server側のLDAP接続に関するドキュメント「Active Directory Domain ServicesのLDAPチャネルバインディング概要」と「Active Directory Domain Services における LDAP 署名の概要」
NetApp側のドキュメント「2026年10月 ドメイン コントローラ更新後のLDAP無効な認証情報 FAQ」(英語版)
まずはLDAPSでアクセスするための「Active Directory Domain Services で SSL 経由で LDAP の証明書を構成する」で、署名などで使用する証明書を用意する
この設定については過去に「Windows Server 2025で作ったActive Directory環境でldapsを使えるようにする」でRHEL からopensslコマンドとldapsearchコマンドを使って確認する方法と共に記載している
次に「Active Directory Domain Services のグループポリシーを使ってLDAP署名を設定する」でクライアントからのアクセス時にLDAP署名を強制する設定を行う、と
クライアントからアクセスする時に確認するべき点のメモ
| アクセステスト内容 | 署名不要のDC | 署名必須のDC |
| LDAP(389) + Simple bind | 成功 | 失敗(Strong Auth Required / LDAPエラー8) |
| LDAP(389) + SASL(署名) | 成功 | 成功 |
| LDAPS(636)+ Simple bind | 証明書があれば成功 | 証明書があれば成功 |
ldapsearch コマンドで挙動を確認する手法のメモ
① 署名必須かどうか(LDAP+Simple bind)
確認コマンド
ldapsearch -x -H ldap://dc01.example.local \
-D "user@example.local" -W \
-b "dc=example,dc=local" -s base "(objectClass=*)" dn
署名必須の場合、下記の様なエラー
ldap_bind: Strong(er) authentication required (8)
additional info: 00002028: LdapErr: DSID-0C09xxxx, The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection
② LDAP+SASL(Kerberos)+署名での接続
確認コマンド
kinit user@EXAMPLE.LOCAL
ldapsearch -Y GSSAPI -H ldap://dc01.example.local -b "dc=example,dc=local" -s base dn
# 署名なしを強制して失敗するか確認(失敗すれば署名必須)
ldapsearch -Y GSSAPI -O "minssf=0,maxssf=0" -H ldap://dc01.example.local -b "dc=example,dc=local" -s base dn
③ LDAPSでのテスト
確認コマンド
# 証明書・TLSバージョンの確認
openssl s_client -connect dc01.example.local:636 -showcerts </dev/null
# LDAPSでbind
LDAPTLS_CACERT=/path/to/ca.pem \
ldapsearch -x -H ldaps://dc01.example.local \
-D "user@example.local" -W -b "dc=example,dc=local" -s base dn
# StartTLS(389)
ldapsearch -x -ZZ -H ldap://dc01.example.local -D "user@example.local" -W -b "dc=example,dc=local" -s base dn
自己署名環境の場合、「LDAPTLS_REQCERT=never」を設定することで証明書検証を省略できる
LDAPS上でGSSAPIを使う場合、ADはTLS上のsign/sealを拒否するため「-O maxssf=0」オプションの追加、もしくは ldap.conf に「SASL_SECPROPS maxssf=0」を設定する
Windows環境で確認するためのメモ
PowerShellの場合
Add-Type -AssemblyName System.DirectoryServices.Protocols
$cred = Get-Credential # user@example.local
# 389 + Simple bind(署名必須なら例外)
$c = New-Object System.DirectoryServices.Protocols.LdapConnection("dc01.example.local:389")
$c.SessionOptions.ProtocolVersion = 3
$c.AuthType = [System.DirectoryServices.Protocols.AuthType]::Basic
try { $c.Bind($cred.GetNetworkCredential()); "389 Simple bind: 成功(署名不要)" }
catch { "389 Simple bind: 失敗 -> $($_.Exception.InnerException.Message)" }
# 636 LDAPS
$s = New-Object System.DirectoryServices.Protocols.LdapConnection("dc01.example.local:636")
$s.SessionOptions.ProtocolVersion = 3
$s.SessionOptions.SecureSocketLayer = $true
$s.AuthType = [System.DirectoryServices.Protocols.AuthType]::Basic
try { $s.Bind($cred.GetNetworkCredential()); "LDAPS: 成功" }
catch { "LDAPS: 失敗 -> $($_.Exception.InnerException.Message)" }
Test-NetConnection dc01 -Port 636 はTCP疎通しか見ないため、TLSが成立するかの確認には上記のbindテストを使う
また、クライアント側でレジストリが設定されているか確認
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\LDAP -Name LDAPClientIntegrity
# 0=なし, 1=ネゴシエート(既定), 2=必須
Active Directoryサーバ側で確認する手法
レジストリ「HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters」を確認
LDAPServerIntegrity が「1」は署名無し、「2」は署名必須
LdapEnforceChannelBinding が「0」無効、「1」サポートしてるなら使う、「2」必須
GPOでの設定項目「ドメイン コントローラー: LDAP サーバー署名必須」
イベントログでの確認
Directory Serviceのイベントログに出てくるイベントID
2886/2887:署名なしbindの存在・件数の警告
2889:署名なしbindを行ったクライアントIPとアカウント(「16 LDAP Interface Events」の診断ログを2に設定して出力)
3039~3041:チャネルバインディング関連