这是我使用 tls 使用 winldap 连接到 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 );
}
}
请有人帮我解决问题,
提前致谢。