60

我想要我的 LDAP 服务器的 SSL 证书,它是 Novell eDirectory。我已经使用 openssl 连接到 ldap 以查看证书。

openssl s_client -connect 192.168.1.225:636

它只是打印证书。如何将其保存到某些证书格式文件?

4

8 回答 8

102

复制和之间-----BEGIN CERTIFICATE-----的所有内容-----END CERTIFICATE-----(包括这些分隔符)并将其粘贴到一个新的文本文件中(通常带有扩展名.pem.crt)。您可以为此使用您最喜欢的(纯文本)编辑器,例如 Notepad、Gedit、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
于 2011-08-17T00:48:50.303 回答
14

对于那些希望使用 StartTLS 通过 LDAP 连接获取证书的人:

在使用 -starttls for s_client 时,我已经重新提交了一个补丁到 OpenSSL 以支持 LDAP。所以最终这应该可以工作(如果它曾经成功我猜 - 还没有到 2016 年 10 月 18 日)

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

编辑:支持最终合并在此 PR下。C 不是我的强项,所以幸运的是有人用它跑了;)

在通过 TCP 连接发出 STARTTLS 命令后,我还编写了一个 PHP 函数来提取 SSL 证书。它可以很容易地移植到其他语言,只需一点工作:

/**
 * @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;
}
于 2016-10-19T01:19:07.767 回答
5

有一个工具可以让您从服务器收集和保存 SSL/TLS 证书,该服务器不仅可以使用 LDAPS,还可以使用 LDAP/STARTTLS。这是著名的InstallCert程序的修订版,用 Java 编写。

像这样运行它:

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

它将为您将证书保存在jssecacertsJRE 文件树中的extracerts密钥库文件中,以及当前目录中的密钥库文件中。然后,您可以使用 Java keytool将证书导出为其他格式。

欢迎您访问我的博客页面又一个 InstallCert for Java,现在支持 STARTTLS下载和说明。

于 2013-11-29T07:34:12.713 回答
5

我发现从任何启用 SSL 的协议(如 ldap、imap、pop、ftps、https 等)保存证书的最简单方法就是使用 chrome 浏览器。假设您的服务器运行任何协议(如上所述)创建这样的 url

http://:(例如,如果您的 ldap 服务器在 SSL 端口 10636 上运行,则为https://example.com:10636)。只需点击此 URL 并从 chrome 浏览器本身获取证书。下面是一个简单的演示。在这个演示中,我的 ldap 服务器使用的是自签名证书。

点击证书信息

单击复制到文件并单击下一步保存证书。

在此处输入图像描述

此方法适用于在 SSL 上运行的任何服务器,而与协议无关。

干杯。

于 2015-08-25T09:23:51.850 回答
4

有一个非常简单的方法只使用openssl

openssl s_client -connect 192.168.1.225:636 < /dev/null |
  openssl x509 -out cert.pem

第一行从服务器获取证书,第二行解析证书并允许将其转换为不同的格式,例如:

  • openssl x509 -noout -text: 以文本格式打印证书,例如,用于调试。
  • openssl x509 -outform der -out cert.crt: 以 DER 格式保存证书

您可以查看所有可能变化的文档

于 2020-01-15T19:27:06.133 回答
3

我们喜欢使用 ldapsearch 来执行此操作。整个过程,几行,但这是它的要点:

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

-吉姆

于 2015-04-09T19:48:24.730 回答
1

或者,如果您需要 DER 或 PEM 格式的公钥和私钥,您可以通过 iManager 轻松导出它们。(DER 是二进制格式,PEM 是 base64 编码格式,因此在 iManager 中,您的选择将是 DER 或 B64 和 B64 ~= PEM)

于 2011-08-25T00:53:09.937 回答
0

您还可以使用https://keystore-explorer.org/导出证书。使用检查 -> 检查 SSL。

于 2021-09-16T08:37:19.283 回答