【问题标题】:Connecting or Accessing Okta LDAP Interface using c# .NET Client使用 c# .NET 客户端连接或访问 Okta LDAP 接口
【发布时间】:2019-07-22 03:30:35
【问题描述】:

我有一个使用 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://docs.microsoft.com/en-us/dotnet/api/system.directoryservices?view=netframework-4.8

https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.directoryentry?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)
        {

        }

谢谢

【问题讨论】:

    标签: c# ssl ldap okta directoryservices


    【解决方案1】:

    更新:所以我为自己做了一些测试。我明白发生了什么。

    如果您执行DNS lookup on dev-506668.ldap.oktapreview.com,它会给您一个CNAME 结果到op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com

    浏览器将使用 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,但使用起来可能会有点困难。我从来没有用过它。 (您可能应该进行一些自己的验证,而不是像该示例那样只返回true)。

    这可能是您无论如何都可以与 Okta 支持分享的内容。


    原答案:

    听起来您的计算机不信任服务器上使用的 SSL 证书。为了验证这一点,我使用 Chrome。你必须像这样启动 Chrome:

    chrome.exe --explicitly-allowed-ports=636
    

    然后你可以把这个放到地址栏里:

    https://dev-506668.ldap.oktapreview.com:636
    

    如果证书不受信任,那么您将收到一个很大的错误。您可以单击“高级”按钮查看 Chrome 给出的不可信的原因。但是 Chrome 也会让您通过单击地址左侧地址栏中的“不安全”来检查证书,然后单击“证书”。

    它可能不被信任有几个原因:

    1. 您使用的完全限定域名 (dev-506668.ldap.oktapreview.com) 与证书上的内容不匹配。如果是这种情况,您也许可以只更改用于匹配证书的域名。
    2. 证书不是由受信任的机构颁发的。它可以是自签名证书。如果是这种情况,那么当您查看证书时应该会看到一个“安装证书”按钮,您可以使用它来明确信任该证书。请参阅here 获取屏幕截图,从第 3 步开始。这仅适用于当前计算机。

    【讨论】:

    • 您好,感谢您的回复,证书名称是 *.ldap.oktapreview.com,它可以与其他 LDAPv3 兼容的客户端应用程序(如 Apache Directory Studio 和 LDAPAdmin)一起正常工作。
    • 证书在您测试的计算机上是否显示为受信任?
    • 是的,它显示为受信任,我已将其置于受信任的根证书颁发机构
    • help.okta.com/en/prod/Content/Topics/Directory/… 这就是 Okta 的 LDAP 接口的全部意义所在。
    • " * " 是一个通配符,这意味着它可以与任何 .ldap.oktapreview.com 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多