1

シングルスレッドアプリケーションで正常に動作するwinldapを使用してtlsを使用してldapサーバーに接続するコードを次に示します。同じコードをマルチスレッドの巨大なアプリケーションと統合すると、アプリケーションはldap_start_tls関数で失敗します、エラーの可能性を確認しましたが、手掛かりがありません。

エラー コードは 0x35 (LDAP_UNWILLING_TO_PERFORM) です。

しかし、SSL は私のアプリケーションでは問題なく動作します。

SSL を使用して、ldapserver に対して認証できます。

SSL/TLS を有効にして opends を使用しています

LDAP_OPT_SERVER_CERTIFICATE オプションと true を返すコールバック関数を設定して、証明書関連の問題を解決しようとしました。

/シングルスレッドアプリケーションの場合、ssl と TLS の両方で正常に機能する関数/

int authCheck( char *host, char *port, char *bind_dn, char *bind_pw, bool TLS)
{
    LDAP *ld;
    int rc;
    int portnumber = atoi( port );

    /* Get a handle to an LDAP connection. */
    if( ( ld = ldap_init(host, portnumber ) ) == NULL ) 
    {
        printf( "Can't initialize %s : %d\n" , host, portnumber );
        return( -1 );
    }

    ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &requested_version );
    ldap_set_option(ld, LDAP_OPT_SERVER_CERTIFICATE, &VerifyCert);

    /* If appropriate, switch to a secure connection */

    if (TLS == true)
    {

        rc = ldap_start_tls_s( ld, NULL, NULL, NULL, NULL);


       if ( rc != LDAP_SUCCESS ) 
       {
            printf( "Can't initialize tls\n" );
            return( -1 );
        }
}

誰かが問題を解決するのを手伝ってください、

前もって感謝します。

4

0 に答える 0