web-dev-qa-db-ja.com

OpenSSLからLDAP SSL証明書を保存する方法

Novell eDirectoryであるLDAPサーバーのSSL証明書が必要でした。 opensslを使用してldapに接続し、証明書を表示しました。

openssl s_client -connect 192.168.1.225:636

証明書を印刷するだけです。これを証明書形式のファイルに保存するにはどうすればよいですか?

43
Dungeon Hunter

-----BEGIN CERTIFICATE----------END CERTIFICATE-----の間のすべて(これらの区切り文字を含む)をコピーし、新しいテキストファイルに貼り付けます(通常、拡張子.pemまたは.crt)。これには、メモ帳、Gedit、Vim、Emacs(使用しているシステムに応じて)など、お気に入りの(プレーン)テキストエディターを使用できます。

または、 here のように、出力を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
79
Bruno

StartTLSを使用してLDAP接続で証明書を取得する場合:

S_clientに-starttlsを使用する場合、LDAPをサポートするためにOpenSSLに パッチを再送信 します。だから最終的にこれは動作するはずです (もしそれがうまくいけば、10/18/16の時点ではまだです)

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

Edit:最終的にサポートは this PR に統合されました。 Cは私の得意ではないので、幸運なことに他の誰かがそれで走りました;)

また、PHP接続を介してSTARTTLSコマンドを発行した後にSSL証明書を抽出する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;
}
8
ChadSikorra

Ldap、imap、pop、ftps、httpsなどのSSL対応プロトコルから証明書を保存するのに最も簡単な方法は、chromeブラウザを使用することです。言及)このようなURLを作成する

http://:(LDAPサーバーがSSLポート10636で実行されている場合の例は https://example.com:10636 です)。このURLを押すだけで、chromeブラウザ自体から証明書を取得します。以下の簡単なデモ。このデモでは、LDAPサーバーは自己署名証明書を使用しています。

Click On Certificate Information

[ファイルへのコピー]をクリックし、[次へ]をクリックして証明書を保存します。

enter image description here

この方法は、プロトコルに関係なく、SSLで実行されているすべてのサーバーで機能します。

乾杯。

3
Dungeon Hunter

LDAPSだけでなくLDAP/STARTTLSも使用できるサーバーからSSL/TLS証明書を収集して保存できるツールがあります。これは、Javaで作成された有名な InstallCert プログラムの改訂版です。

次のように実行します。

Java -jar installcert-usn-20131123.jar Host_name:port

jREファイルツリーのjssecacertsキーストアファイルと、現在のディレクトリのextracertsキーストアファイルに証明書を保存します。その後、Java keytool を使用して、証明書を他の形式にエクスポートできます。

あなたは私のブログページを訪問することを歓迎します まだ別のInstallCert for Java、現在STARTTLSサポート付き ダウンロードと手順について。

3
Sergey Ushakov

これを実行するためにldapsearchを使用することが好きでした。 プロセス全体 、数行ですが、これがその要点です:

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

-ジム

2
jwilleke

または、DERまたはPEM形式で必要な場合は、iManagerを介して公開キーと秘密キーを簡単にエクスポートできます。 (DERはバイナリ形式で、PEMはbase64エンコード形式であるため、iManagerでは、このコンテキストではDERまたはB64およびB64〜= PEMを選択できます)

1
geoffc