Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接到通过ssl打开LDAP_C#_Openldap - Fatal编程技术网

C# 连接到通过ssl打开LDAP

C# 连接到通过ssl打开LDAP,c#,openldap,C#,Openldap,我在一个网站上工作,该网站用于重置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?: Us

我在一个网站上工作,该网站用于重置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,它工作正常


请告诉我有什么问题。

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

connection.SessionOptions.VerifyServerCertificate =
                new VerifyServerCertificateCallback((con, cer) => true);

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

public static X509Certificate ClientCertFinder(LdapConnection connection,
                                                byte[][] trustedCAs)
{
   return null;
}
然后,将SessionOptions QueryClientCertificateCallback委托设置为使用存根,如下所示:

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

您甚至可以像@jbl对验证回调的回答中那样将其设置为一行程序,但也许有一天我会想进行客户端证书身份验证,并且使用该存根作为如何进行验证的提醒

现在我必须重置用户密码我对userPassword使用了替换操作,但出现错误“服务器无法处理目录请求”@mayank.karki您应该关闭此问题,并在新问题中详细描述您的新问题。我的新问题的链接是/reset ldap user password error服务器无法处理目录请求感谢您的支持。您好,jbl,我还有一个问题。这是链接。感谢您的回复。