Подтвердить что ты не робот

Как сохранить SSL-сертификат LDAP от OpenSSL

Мне нужен SSL-сертификат моего LDAP-сервера, который является Novell eDirectory. Я использовал openssl для подключения к ldap для просмотра сертификата

openssl s_client -connect 192.168.1.225:636

просто распечатайте сертификат, как я могу сохранить его в файле формата сертификата?

Спасибо и приветствую,

Солнечный.

4b9b3361

Ответ 1

Скопировать все между -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- (включая эти разделители) и вставить его в новый текстовый файл (обычно с расширением .pem или .crt). Вы можете использовать для этого свой любимый (простой) текстовый редактор, например "Блокнот", "Гедит", "Vim", "Emacs" (в зависимости от используемой системы).

В качестве альтернативы вы можете передать вывод на sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p', как описано здесь:

echo -n | openssl s_client -connect 192.168.1.225:636 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldapserver.pem

Ответ 2

Имеется инструмент, который позволяет собирать и сохранять сертификат SSL/TLS с сервера, который говорит не только с LDAPS, но и с LDAP/STARTTLS. Это пересмотр известной программы InstallCert, написанной на Java.

Просто запустите его так:

java -jar installcert-usn-20131123.jar host_name:port

и он сохранит сертификат для вас в файле хранилища jssecacerts в дереве файлов JRE, а также в файле хранилища extracerts в вашем текущем каталоге. Затем вы можете использовать Java keytool для экспорта сертификатов (ов) в другие форматы.

Вы можете посетить мою страницу блога Еще один InstallCert для Java, теперь с поддержкой STARTTLS для загрузки и инструкций.

Ответ 3

Для тех, кто хочет захватить сертификаты через соединение LDAP с помощью StartTLS:

У меня повторно отправил патч в OpenSSL для поддержки LDAP при использовании -starttls для s_client. Поэтому в конечном итоге это должно сработать (если это когда-либо будет сделано, я думаю - еще не с 10/18/16):

openssl s_client -connect servername:389 -starttls ldap -showcerts

Изменить. Поддержка была в конечном итоге объединена под этим PR. C не является моей сильной стороной, так что, к счастью, кто-то еще бежал с ней;)

Я также написал функцию PHP для извлечения SSL-сертификатов после выдачи команды STARTTLS по TCP-соединению. Его можно легко портировать на другие языки с небольшой работой:

/**
 * @param string $server The server name to connect to
 * @param int $port The standard LDAP port
 * @return array In the form of ['peer_certificate' => '', 'peer_certificate_chain' => [] ]
 */
function getLdapSslCertificates($server, $port = 389)
{
    $certificates = [
        'peer_certificate' => null,
        'peer_certificate_chain' => [],
    ];
    // This is the hex encoded extendedRequest for the STARTTLS operation...
    $startTls = hex2bin("301d02010177188016312e332e362e312e342e312e313436362e3230303337");
    $opts = [
        'ssl' => [
            'capture_peer_cert' => true,
            'capture_peer_cert_chain' => true,
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ];

    $context = stream_context_create($opts);
    $client = @stream_socket_client(
        "tcp://$server:$port",
        $errorNumber,
        $errorMessage,
        5,
        STREAM_CLIENT_CONNECT,
        $context
    );
    @stream_set_timeout($client, 2);
    @fwrite($client, $startTls);
    @fread($client, 10240);
    @stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
    $info = @stream_context_get_params($client);

    if (!$info) {
        return $certificates;
    }
    openssl_x509_export($info['options']['ssl']['peer_certificate'], $certificates['peer_certificate']);

    foreach ($info['options']['ssl']['peer_certificate_chain'] as $index => $cert) {
        $certChain = '';
        openssl_x509_export($cert, $certChain);
        $certificates['peer_certificate_chain'][$index] = $certChain;
    }
    @fclose($client);

    return $certificates;
}

Вышеуказанная функция вернет массив, содержащий одноранговый сертификат и цепочку сертификатов одноранговых узлов. Поэтому его можно использовать так:

// Just pass it the server name
$certificates = getLdapSslCertificates('dc1.example.local');

// The certificates are in the array as strings in PEM format
echo $certificates['peer_certificate'].PHP_EOL;
foreach ($certificates['peer_certificate_chain'] as $cert) {
    echo $cert.PHP_EOL;
}

Ответ 4

Нам понравилось использовать ldapsearch для выполнения этого. весь процесс, несколько строк, но это его суть:

ldapsearch -x -T ~/ -t -h your-edirectory-host.yourdomain.com -b "cn=Security" objectclass=nDSPKICertificateAuthority cACertificate

-Джит

Ответ 5

Или вы можете легко экспортировать открытый и закрытый ключи через iManager, если вам нужны они в формате DER или PEM. (DER - двоичный формат, PEM - кодированный base64 формат, поэтому в iManager в этом случае ваши варианты будут DER или B64 и B64 ~ = PEM)

Ответ 6

Самый простой способ сохранить сертификат из любых протоколов, поддерживающих SSL, таких как ldap, imap, pop, ftps, https и т.д., просто использует браузер Chrome. Предположим, что ваш сервер, на котором работает какой-либо протокол (например, упомянутый), создает URL-адрес, подобный этому

http://: (например, если ваш сервер ldap работает на SSL-порту 10636, он будет https://example.com:10636). Просто нажмите этот URL-адрес и получите сертификат от самого браузера Chrome. Простая демонстрация ниже. В этой демонстрации мой сервер ldap использует самозаверяющий сертификат.

Нажмите

Нажмите "Скопировать в файл" и сохраните сертификат, нажав следующий.

введите описание изображения здесь

Этот метод работает для любого сервера, работающего на SSL, независимо от протокола.

Приветствия.