Мне нужно добавить доступ LDAP к моему базовому приложению do tnet с использованием SSL, и у меня возникли проблемы с проблемой RemoteCertificateChainErrors
.
У меня работает docker -openldap используя мои собственные сгенерированные сертификаты (самоподписанные, от this gist ). Я доверял сертификату CA на моей машине linux и могу успешно запросить экземпляр ldap, работающий в docker, используя LDAPS
ldapsearch -H ldaps://ldap.example.org -x -w admin -b "dc=ldap,dc=example,dc=org" -D "cn=admin,dc=ldap,dc=example,dc=org" "(objectclass=*)" cn
или если мне потребуется запустить TLS
ldapsearch -ZZ -H ldap://ldap.example.org:389 -x -w admin -b "dc=ldap,dc=example,dc=org" -D "cn=admin,dc=ldap,dc=example,dc=org" "(objectclass=*)" cn
Вот пример кода с использованием библиотеки Novell.Directory.Ldap.NETStandard
, который, насколько мне известно, должен работать:
using System;
using Novell.Directory.Ldap;
namespace LdapWithNovellTester
{
class Program
{
static void Main(string[] args)
{
using (var conn = new LdapConnection())
{
conn.Connect("ldap.example.org", 389);
Console.WriteLine($"Ldap is connected: {conn.Connected}");
conn.StartTls();
Console.WriteLine($"Ldap has TLS: {conn.TLS}");
conn.Bind("cn=admin,dc=ldap,dc=example,dc=org", "admin");
Console.WriteLine($"Ldap is bound: {conn.Bound}");
}
}
}
}
Однако вышеприведенное просто выдает Unhandled Exception: Novell.Directory.Ldap.LdapException: Connect Error
Если я добавлю делегата проверки сертификата к соединению (до подключения), используя:
conn.UserDefinedServerCertValidationDelegate += (sender, certificate, chain, errors) =>
{
Console.WriteLine($"Sender: {sender}\ncertificate: {certificate}\nChain: ${chain}\nerrors: {errors}");
return true;
};
, я вижу, что error
равно RemoteCertificateChainErrors
. Значит ли это, что ядро tnet просто не доверяет моему сертификату CA? Если так, как это исправить, чтобы он представлял производство?
Примечание: я не собираюсь оставлять return true
от делегата, иначе я бы проигнорировал действительность соответствующего сертификата.