4

我正在一个用于重置 LDAP 用户密码的网站上工作。我无法通过 ssl 与服务器建立连接。我尝试了各种代码和身份验证类型。

这是在服务器上用于与托管网站的 LDAP 连接的内容。我还使用两个 ssl 端口对其进行了测试。636 和 3269。

0 = ldap_set_option(ld, LDAP_OPT_ENCRYPT, 1)
res = ldap_bind_s(ld, NULL, &NtAuthIdentity?, NEGOTIATE (1158)); v.3

{NtAuthIdentity?: User='_ldapuser'; Pwd='unavailable';; domain = 'SJTPNOC.DOMAIN'}

我在网站中使用以下代码

LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier("SJTP.DOMAIN",636));

connection.SessionOptions.ProtocolVersion = 3;

connection.AuthType = AuthType.Basic;

connection.Credential = new NetworkCredential("CN=user,CN=Users,DC=SJTPNOC,DC=DOMAIN", "password","CN=Users,DC=SJTPNOC,DC=DOMAIN");

connection.SessionOptions.SecureSocketLayer=true;

connection.Bind();

获取异常“LDAP 服务器不可用”。我尝试了使用 389 端口且没有 ssl 的代码,它工作正常。

请让我知道出了什么问题。

4

2 回答 2

4

如果您只想要加密并且不需要 ldap 服务器的强身份验证,也许您应该添加:

connection.SessionOptions.VerifyServerCertificate =
                new VerifyServerCertificateCallback((con, cer) => true);
于 2012-09-27T12:57:03.080 回答
3

我也有通过 SSL 连接的问题,但不是通过纯文本。我做了一些网络嗅探,并且能够看到虽然我将 LdapConnection.AuthType 设置为 Basic,但我的客户端计算机正在查找并使用客户端证书进行 SSL 握手。它找到的证书(不知道我是否应该对 VisualStudio 或 .NET LdapConnection 类感到生气)是 LDAP 服务器不喜欢的俗气的自签名证书。它返回一个非常安全的“服务器不可用”错误;很好。所以在 SessionOptions 中有一个客户端证书解析器委托,我需要提供一个非常简单的实现:

public static X509Certificate ClientCertFinder(LdapConnection connection,
                                                byte[][] trustedCAs)
{
   return null;
}

然后,将 SessionOptions QueryClientCertificateCallback 委托设置为使用存根,如下所示:

connection.SessionOptions.QueryClientCertificate =
      new QueryClientCertificateCallback(ClientCertFinder);

您甚至可以像@jbl's answer for the validation callback 那样将其设为oneliner,但也许有一天我会想要进行客户端证书身份验证,并且拥有该存根可以提醒您如何做到这一点。

于 2013-07-29T21:51:27.000 回答