7

保護されたポート (ldaps://) で LDAP サーバーに接続しようとしているサンプル プログラムがここにありますが、サンプル プログラムはサーバーにバインドできません。

#define LDAP_DEPRECATED 1
#include <stdio.h>
#include <ldap.h>

#define BIND_DN "dc=example,dc=com"
#define BIND_PW "secret"

int main() {
    LDAP *ld;
    int rc;
    int reqcert = LDAP_OPT_X_TLS_NEVER;
    int version = LDAP_VERSION3;
    int ret(0);

    if (ldap_initialize (&ld, "ldaps://192.168.1.51:10636")) {
        perror("ldap_init"); /* no error here */
        return(1);
    }

    ldap_set_option (ld, LDAP_OPT_PROTOCOL_VERSION, &version);
    ldap_set_option (ld, LDAP_OPT_X_TLS_REQUIRE_CERT, &reqcert);

    rc = ldap_bind_s(ld, BIND_DN, BIND_PW, LDAP_AUTH_SIMPLE);

    if( rc != LDAP_SUCCESS )
    {
        fprintf(stderr, "ldap_simple_bind_s: %s\n", ldap_err2string(rc) );
        return( 1 );
    }
    printf("Initial Authentication successful\n");
    ldap_unbind(ld);
}

ただし、START_TLS を使用すると、サンプル プログラムはポート 10389 で実行されている LDAP サーバーに正常にバインドされます。ldapsearch クライアントはサーバーに接続し、ユーザー ベース ツリーを検索できます。しかし、上記のサンプル プログラムはそうではありません。

START_TLS で動作させるには: ここに私が追加したものがあります:

ldap_set_option (ld, LDAP_OPT_X_TLS_REQUIRE_CERT, &reqcert);    
rc = ldap_start_tls_s(ld, NULL, NULL);
    if (rc != LDAP_SUCCESS) {
        printf("ldap_start_tls() %s",ldap_err2string(ret));
    }

誰かがldaps://経由でLDAPサーバーにバインドするためにここで欠けているものを指摘できますか??

4

2 に答える 2

1

/etc/openldap/ldap.conf を編集し、次の行を追加します。

TLS_REQCERT 決して

その後、再試行してください。

于 2013-06-13T03:18:54.767 に答える
0

SSL ポート経由で TLS 接続をセットアップしようとしているようですが、これは不可能です。以下は、 LDAP の wiki ページからの引用です。

同様の非標準の ldaps: LDAP over SSL の URL スキームがあります。これを、標準の ldap: スキームを使用した StartTLS 操作を使用して実現される TLS を使用した LDAP と混同しないでください。

TLS をサポートせず、SSL のみをサポートする非常に古い LDAP サーバーにプログラムが接続する必要がない限り、常に TLS を使用することをお勧めします。少なくとも SSL と同じくらい安全です。

ただし、SSL 接続を作成する必要がある場合は、openldap サイトのこのスレッドが役立つと思います。LDAP_OPT_X_TLS_CACERTFILE要するに、(これを確認する環境がなくてすみません)の代わりに使用する必要があると思いますLDAP_OPT_X_TLS_REQUIRE_CERT。また、ldap_start_tls_s を呼び出すべきではありません。これは、TLS 接続を確立しようとするためです (これは望ましくありません)。

于 2013-06-11T08:29:09.107 に答える