使用PowerShell连接到LDAPS时如何忽略客户端证书提示?

n3schb8v  于 2023-04-30  发布在  Shell
关注(0)|答案(1)|浏览(201)

我有一个简单的PowerShell脚本,它使用匿名身份验证通过LDAPS绑定到非AD LDAP,并执行一个简单的查询。我的问题是,当绑定启动时,LDAP服务器提示我输入客户端证书,然后我得到一个选择证书对话框。如果我的智能卡在读卡器中,它希望使用我的客户端证书并要求输入PIN,如果我输入PIN,它实际上会失败,并显示LDAP服务器不可用消息。如果我把智能卡拿出来,我可以取消证书提示几次,绑定继续,我可以做查询。我想知道是否有一个会话选项,将允许我禁用证书提示。我已经和目录管理员谈过了,他们说LDAP服务器在使用SSL时被配置为证书认证,但它只是可选的。客户端应该处理是否使用证书认证。只是想知道是否有一种干净的方法来绕过PowerShell中的cert提示。
下面是我的简单代码:

[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.Protocols")
[System.Reflection.Assembly]::LoadWithPartialName("System.Net")

$c = New-Object System.DirectoryServices.Protocols.LdapConnection "dir.mycompany.com:636"

#Set session options

$c.SessionOptions.SecureSocketLayer = $true;
$c.SessionOptions.ProtocolVersion = 3

$c.AuthType = [System.DirectoryServices.Protocols.AuthType]::Anonymous

$c.Bind();

$basedn = "ou=People,dc=mycompany,dc=com"
$filter = "(uid=testuser1)"
$scope = [System.DirectoryServices.Protocols.SearchScope]::Subtree
$attrlist = ,"employeeID"

$r = New-Object System.DirectoryServices.Protocols.SearchRequest -ArgumentList $basedn, $filter, $scope, $attrlist

$re = $c.SendRequest($r);

$re.Entries.count;
$re.Entries;
7d7tgy0s

7d7tgy0s1#

如果您需要编写代码来决定发送哪个客户端证书,SessionOptionsQueryClientCertificate属性就在那里,它应该返回要使用的证书。
我不知道这是否有效,但尝试返回$null

$c.SessionOptions.QueryClientCertificate = { $null }

相关问题