2013-06-06 35 views
6

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

#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.のldapsearchクライアント上で実行されているLDAPサーバにバインドするには、サーバーに接続しANSユーザーベースツリーを検索することができます。しかし、上のサンプルプログラムはそうではありません。

それは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サーバに結合するために、ここで行方不明です何を指摘することができます:// ?? をここでは、私が追加したものです

+0

私はC++に詳しいことはありませんが、C#ではLDAPSを扱う前と全く同じエラーが発生しています。これを修正したのは、 'VerifyServerCertificate'セッションオプションで常に' delegate {return true} 'を返すことでした:' ldapConnection.SessionOptions.VerifyServerCertificate + = delegate {return true; }; 'C++で同様のことをすることはできますか? – X3074861X

答えて

0

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

TLS_REQCERT決して

、もう一度試してください。

+0

これは、ldap構造オプション "LDAP_OPT_X_TLS_REQUIRE_CERT"を "LDAP_OPT_X_TLS_NEVER"に設定するのと同じではありませんか? –

+0

ldap_initializeは設定ファイルを読み込みます。理論的には、オプションが機能するかどうか、調査する理由を設定してください... –

+0

どこにも書かれていません。ありがとう。 ldap_init()はどうですか(非難されましたが、それは私のためにはうまくいきます)?それは設定ファイルを読むでしょうか?またはldap_set_option()が優先されますか? –

0

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

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

TLSをサポートしていない非常に古いLDAPサーバーに接続する必要がありSSLを使用しない場合は、常にTLSを使用するようにアドバイスします。少なくともSSLほど安全です。

ただし、SSL接続を作成する必要がある場合は、this thread on openldap siteが役立つと思います。要するに、(私はこれをチェックする環境がありません申し訳ありません)LDAP_OPT_X_TLS_REQUIRE_CERTの代わりにLDAP_OPT_X_TLS_CACERTFILEを使用する必要があると思います。また、ldap_start_tls_sを呼び出すべきではありません。なぜなら、TLS接続を確立しようとするからです。

+0

SSLポートでTLSを設定しようとしていません。 SSL(ポート10636)専用のSSLをセットアップしようとしています。また、私はサーバーを検証するための証明書を持っていません。したがって、LDAP_OPT_X_TLS_REQUIRE_CERTをLDAP_OPT_X_TLS_NEVERに設定しています。ldap.confファイルでTLS_REQCERTをNeverに設定するのと同じです。 –

関連する問題