Ошибка LDAPS в ядре do tnet на linux: RemoteCertificateChainErrors - PullRequest
0 голосов
/ 15 января 2020

Мне нужно добавить доступ 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 от делегата, иначе я бы проигнорировал действительность соответствующего сертификата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...