在LDAP中添加StartTLS和LDAPS选项时验证客户端证书

时间:2017-12-21 10:59:57

标签: c++ windows ldap

我正在编写一个允许用户使用LDAP设置登录应用程序的应用程序。 没有Start TLS / LDAPS支持的示例程序:

#include <windows.h>  
#include <winldap.h>

int main(){
    LDAP *ldap =NULL;
    int returnCode = -1;
    int version = LDAP_VERSION3;

    ldap = ldap_init(hostName, PORT);
    if (ldap == NULL) {
        printf("Failed to init LDAP connection");
        return FALSE;
    }

    returnCode = ldap_set_option(ldap, LDAP_OPT_PROTOCOL_VERSION, (void*)&version);
    if (returnCode != LDAP_SUCCESS) {
        cout<<"LDAP: Could not set options. Error: "<< returnCode <<" "<< ldap_err2string(returnCode);
        ldap_unbind(ldap);
        return FALSE;
    }

    returnCode = ldap_connect(ldap, NULL);
    if (returnCode != LDAP_SUCCESS) {
        printf("LDAP: Could not establish connection. Error: %d %s", returnCode, ldap_err2string(returnCode));
        ldap_unbind(ldap);
        return FALSE;
     }

     returnCode = ldap_bind_s(ldap, binddn, bindpwd, LDAP_AUTH_SIMPLE);
     if (returnCode != LDAP_SUCCESS) {
        printf("LDAP: Could not establish connection. Error: %d %s", returnCode,  ldap_err2string(returnCode));
        ldap_unbind(ldap);
        return FALSE;
     }
}

可以使用ldap_start_tls_s函数实现StartTLS。但我想在允许连接之前验证证书。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

StarTLS是扩展的LDAP操作,必须在建立连接后发送。但是,服务器和/或客户端证书验证是TLS协议的一部分。因此,当您使用ldap_start_tls_s函数时,它将自动执行。

如果要在连接时验证服务器证书,则应使用LDAP over SSL,并连接到LDAPS端口。您可以使用ldap_sslinit()方法。