Qui ho un programma di esempio che sta tentando di connettersi al server LDAP sulla porta protetta (ldaps: //) Tuttavia, il programma di esempio non è in grado di legarsi al server.Impossibile associare il programma di esempio al server LDAP tramite SSL (ldaps: //)
#define LDAP_DEPRECATED 1
#include <stdio.h>
#include <ldap.h>
#define BIND_DN "dc=example,dc=com"
#define BIND_PW "secret"
int main() {
LDAP *ld;
int rc;
int reqcert = LDAP_OPT_X_TLS_NEVER;
int version = LDAP_VERSION3;
int ret(0);
if (ldap_initialize (&ld, "ldaps://192.168.1.51:10636")) {
perror("ldap_init"); /* no error here */
return(1);
}
ldap_set_option (ld, LDAP_OPT_PROTOCOL_VERSION, &version);
ldap_set_option (ld, LDAP_OPT_X_TLS_REQUIRE_CERT, &reqcert);
rc = ldap_bind_s(ld, BIND_DN, BIND_PW, LDAP_AUTH_SIMPLE);
if(rc != LDAP_SUCCESS)
{
fprintf(stderr, "ldap_simple_bind_s: %s\n", ldap_err2string(rc));
return(1);
}
printf("Initial Authentication successful\n");
ldap_unbind(ld);
}
Tuttavia, con START_TLS il programma di esempio si lega con successo al server LDAP in esecuzione sulla porta 10389. client ldapsearch è in grado di connettersi al server ans cercare l'albero base di utenti. Ma il programma di esempio sopra non lo fa.
Per farlo funzionare con START_TLS: Ecco quello che ho aggiunto:
ldap_set_option (ld, LDAP_OPT_X_TLS_REQUIRE_CERT, &reqcert);
rc = ldap_start_tls_s(ld, NULL, NULL);
if (rc != LDAP_SUCCESS) {
printf("ldap_start_tls() %s",ldap_err2string(ret));
}
Qualcuno può sottolineare che cosa manco qui per il legame a server LDAP tramite LDAPS: // ??
Non ho molta familiarità con C++, ma ho già visto questo stesso errore prima in C# che si occupa di LDAPS. Il modo in cui lo abbiamo risolto restituiva sempre un 'delegate {return true} sull'opzione di sessione' VerifyServerCertificate': 'ldapConnection.SessionOptions.VerifyServerCertificate + = delegate {return true; }; 'Puoi fare qualcosa di simile in C++? – X3074861X