对于使用winldap的多线程应用程序,ldap_start_tls返回0x35

时间:2015-09-07 19:43:19

标签: winapi openssl ldap openldap starttls

这是我的代码,使用tls连接到ldap服务器使用winldap,适用于单线程应用程序,当我将它与多线程的大型应用程序集成时,相同的代码不起作用, 应用程序在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 );
        }
}

请有人帮我解决问题,

提前致谢。

0 个答案:

没有答案