我正在编写一个允许用户使用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。但我想在允许连接之前验证证书。有什么建议吗?
答案 0 :(得分:1)
StarTLS是扩展的LDAP操作,必须在建立连接后发送。但是,服务器和/或客户端证书验证是TLS协议的一部分。因此,当您使用ldap_start_tls_s函数时,它将自动执行。
如果要在连接时验证服务器证书,则应使用LDAP over SSL,并连接到LDAPS端口。您可以使用ldap_sslinit()方法。