我有一个使用 Okta LDAP 接口工具的客户端。我们有一个 LDAP v3 工具,可以连接 AD、Open LDAP 其他 LDAP v3 支持的服务器。
我们希望将 Okta LDAP 接口集成到我们的工具中,因为它兼容 LDAPv3。我们的代码基于.NET框架+C Sharp。
我们在使用 Okta LDAP 接口连接时面临一些问题/挑战。
我们目前使用微软提供的微软库的System.DirectoryServices。但面临 LDAP 接口的问题。
对于 StartTLS/389
我收到错误:
不愿意表演。 LDAP 错误代码 53
更多:无法建立安全连接。致管理员:此服务需要 TLS。 LDAP
适用于 SSL/636
错误:服务器无法运行。
链接:
https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices?view=netframework-4.8
https://ldapwiki.com/wiki/LDAP_UNWILLING_TO_PERFORM
var oktaLDAPPath = "LDAP://dev-506668.ldap.oktapreview.com:636/ou=users,dc=dev-506668,dc=oktapreview,dc=com";
var un = "uid=*******,dc=dev-506668,dc=oktapreview,dc=com";
var pass = "*******";
var filter = "((objectClass=*))";
try
{
using (var userDirectoryEntry = new DirectoryEntry(oktaLDAPPath, un, pass,AuthenticationTypes.SecureSocketsLayer))
{
using (var directorySearcher = new DirectorySearcher(userDirectoryEntry, filter) { PageSize = 100 })
{
directorySearcher.FindOne();
}
}
}
catch (DirectoryServicesCOMException dex)
{
}
catch (Exception ex)
{
}
谢谢
更新:所以我自己做了一些测试。我明白发生了什么事。
如果您在 dev-506668.ldap.oktapreview.com
op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com
的 CNAME结果。
浏览器将使用 CNAME 的 IP 地址,但仍使用您最初提供的主机名发出请求。但是,由于某种原因,在启动 LDAP 连接时,Windows 使用 CNAME 来启动连接。
换句话说,Windows 正在将请求LDAP://op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com:636
更改。但随后它收到了名称为
*.ldap.oktapreview.com
的 SSL 证书,并且出现恐慌,因为该证书与用于发出请求的名称不匹配 (op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com
)。
我使用 Wireshark 验证了所有这些,监控端口 636 上的流量。SSL 客户端 Hello 使用
op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com
而不是 dev-506668.ldap.oktapreview.com
。
我不知道有什么方法可以让它不这样做。
DirectoryEntry
也无法覆盖它验证 SSL 证书的方式。 LdapConnection
可以,您可以在here 看到,但使用起来可能会有点困难。我从来没有用过它。 (您可能应该自己进行some验证,而不是像该示例那样只返回true
)。
无论如何,这可能是您可以与 Okta 支持人员分享的内容。
原答案:
听起来您的计算机不信任服务器上使用的 SSL 证书。为了验证这一点,我使用 Chrome。你必须像这样启动 Chrome:
chrome.exe --explicitly-allowed-ports=636
然后您可以将其放在地址栏中:
https://dev-506668.ldap.oktapreview.com:636
如果证书不受信任,您将收到一个大错误。您可以单击“高级”按钮查看 Chrome 给出的不被信任的原因。但 Chrome 还允许您通过单击地址左侧地址栏中的“不安全”来检查证书,然后单击“证书”。
它可能不被信任有几个原因:
dev-506668.ldap.oktapreview.com
) 与证书上的内容不匹配。如果是这种情况,您也许只需更改用于匹配证书的域名即可。我最近遇到了这个问题,并指出了以下解决方案:
添加以下注册表值,然后重新启动服务器,看看是否解决了问题。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LDAP\UseHostnameAsAlias DWORD,将值设置为 1
谢谢托尼·佩里!我们遇到了完全相同的问题“错误:服务器无法运行”。尝试使用 System.DirectoryServices 通过 Powershell 查询 Okta LDAP 时,您使用此注册表项的建议解决了该问题。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LDAP\UseHostnameAsAlias DWORD,将值设置为 1
您的帖子为我们节省了很多时间。添加此注册表项并重新启动后,我们可以毫无问题地查询 Okta。因此,查询 DNS 记录(即导致 SSL 证书不匹配的 CNAME 条目)的原始问题似乎是根本原因。