我正在开发一个用于重置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,它工作正常。
请让我知道出了什么问题。
答案 0 :(得分:4)
如果您只想加密并且不需要对ldap服务器进行强身份验证,那么您可以添加:
connection.SessionOptions.VerifyServerCertificate =
new VerifyServerCertificateCallback((con, cer) => true);
答案 1 :(得分: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的验证回调答案一样使用oneliner,但也许有一天我会想要进行客户端证书身份验证,并且使用该存根可以提醒如何执行此操作。