LDAPModel message = new LDAPModel();
string ldapServer = ConfigurationManager.AppSettings["LDAP_host"];
string adminUsername = ConfigurationManager.AppSettings["LDAP_admin_username"];
string adminPassword = ConfigurationManager.AppSettings["LDAP_admin_password"];
int ldapPort = 636; //389
string UsersDN = "ou=users,o=data";
LdapConnection ldapConnection = null;
errorMessage = string.Empty;
try
{
// Log: Attempting to create connection
Log("Creating LDAP connection to server: " + ldapServer + " on port: " + ldapPort);
if (CreateConnection(ref ldapConnection, ldapServer, ldapPort, adminUsername, adminPassword))
{
Log("LDAP connection created successfully. Attempting to bind with admin credentials.");
try
{
ldapConnection.Bind();
Log("Admin bind successful.");
}
catch (LdapException ex)
{
message.STATUS = false;
message.VALUE = "Admin bind failed: " + ex.Message +
"\nError Code: " + ex.ErrorCode +
"\nServer Message: " + ex.ServerErrorMessage;
if (ldapConnection != null)
{
ldapConnection.Dispose();
}
return message;
}
private bool CreateConnection(ref LdapConnection con, string server, int port, string username, string password) //this is for port 636
{
try
{
//System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
con = new LdapConnection(new LdapDirectoryIdentifier(server, port));
con.SessionOptions.SecureSocketLayer = true;
con.SessionOptions.VerifyServerCertificate = (connection, certificate) => true;
//con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallBack);
con.SessionOptions.ProtocolVersion = 3;
con.AuthType = AuthType.Basic;
con.Credential = new NetworkCredential(username, password);
return true;
}
catch (LdapException)
{
return false;
}
catch (Exception)
{
return false;
}
}
private bool CreateConnectionWithoutCert(ref LdapConnection con, string server, int port, string username, string password)//this is test for port 389
{
try
{
con = new LdapConnection(new LdapDirectoryIdentifier(server, port));
//
con.SessionOptions.SecureSocketLayer = false;
//
//con.SessionOptions.StartTransportLayerSecurity(null);
con.SessionOptions.ProtocolVersion = 3;
con.AuthType = AuthType.Basic;
con.Credential = new NetworkCredential(username, password);
return true;
}
catch (LdapException)
{
return false;
}
catch (Exception)
{
return false;
}
}
private bool ServerCallBack(LdapConnection connection, X509Certificate certificate)
{
return true;
}
< /code>
Я показал вам соответствующие части кода. Принципал, пароль и имя хоста поступают из WebConfig. Я знаю, что проблема не является основным, паролем или именем хоста, потому что, когда я тестировал с портом 389, она работает должным образом, я могу правильно связать. Однако, чтобы отметить, когда я использовал код «conssessionOptions.StartTransportLayerSecurity (null);», Bind не удалась, и в нем говорилось: «Проверьте учетные данные LDAP».
Проблема - порт 636, привязка поддерживает сбой, и я продолжаю получать:
Addion Bind. /> Вещи, которые я пробовал: < /p>
-telnet в порт 636, и порт показывает, что его открытый < /p>
-i получил сертификаты, один из них является сертификатом корня, а другой-листовой сертификат, я поместил Certs в сертификат и Certmgr. Потому что его старый. < /p>
-Apache Каталог использовался для подключения к серверу к порту 636, и он показал, что он может подключаться к сертификату, но также отметить, что он использует TLS 1.3 < /p>
-Isesest Wireshark на сервере, и он показывает, что клиент Hello был отправлен из-за того, что он показал, что это было то, что он был выявлено, это было то, что он был выявлено, это было то, что он был выявлено, это было то, что он показал, что это было выявлено. Это из -за сертификатов? Я попросил команду LDAP дать мне полную цепочку сертификатов, но они сказали, что сертификат, подписанный, уже достаточно. Это из -за TLS 1.2? Есть ли код, который мне не хватает? Я не могу понять, как подключиться к порту 636.
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-port-636