I am new to
Openldap and TLS/SSL. I have two small
test programs (see details
below). The first uses ldap_init the second
ldap_initalize. My observation
is:
1) Using ldap_init, ldap_start_tls_s and set LDAP_OPT_X_TLS_ALLOW
(empty
ldap.conf)
It does not connect on port 389 nor
636
2) Using ldap_init,ldap_start_tls_s and set LDAP_OPT_X_TLS_ALLOW
(emprty
ldap.conf and only TLS_REQCERT ALL in ldaprc)
It does not connect on port 636 but it does on port 389
3) Using
ldap_initialize and set LDAP_OPT_X_TLS_ALLOW (empty
ldap.conf)
It does not connect on port 389 nor
636
4) Using ldap_initialize and set LDAP_OPT_X_TLS_ALLOW (empty
ldap.conf and
only TLS_REQCERT ALL in
ldaprc)
It does not connect on
port 389 but it does on port 636
My first question is why
does
val = LDAP_OPT_X_TLS_ALLOW;
ldap_set_option (ld,
LDAP_OPT_X_TLS, &val);
not work ?
Secondly why behaves
ldap_init different to ldap_initialize ?
Thirdly what do I need to do to
be able to use TLS/SSL on either port 389
or
636 ?
Thank
you
Markus
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ldap_debug
= -1 /*LDAP_DEBUG_ANY */ ;
(void) ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL,
&ldap_debug);
if (strstr(argv[1],"://") ) {
hostname=strstr(argv[1],"://")+3;
ssl=strstr(argv[1],"ldaps://");
host=strdup(hostname);
port=389;
if ((p=strchr(host,':')))
{
*p='\0';
p++;
port=atoi(p);
}
}
ld = (LDAP *)ldap_init(host,port);
val =
LDAP_VERSION3;
(void)ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,
&val);
(void)ldap_set_option(ld, LDAP_OPT_REFERRALS ,
LDAP_OPT_ON);
ldap_start_tls_s(ld, NULL, NULL);
val =
LDAP_OPT_X_TLS_ALLOW;
ldap_set_option (ld, LDAP_OPT_X_TLS,
&val);
.
.
.
./ldap_test ldaps://w2k3.windows2003.home:636
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_create
ldap_extended_operation_s
ldap_extended_operation
ldap_send_initial_request
ldap_new_connection
1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP
w2k3.windows2003.home:636
ldap_new_socket: 4
ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:636
ldap_connect_timeout: fd: 4
tm: -1 async: 0
ldap_open_defconn:
successful
ldap_send_server_request
ldap_result ld 8065c90 msgid
1
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
wait4msg ld 8065c90 msgid 1 (infinite
timeout)
wait4msg continue ld 8065c90 msgid 1 all 1
** ld 8065c90
Connections:
* host: w2k3.windows2003.home port: 636
(default)
refcnt: 2 status: Connected
last used: Tue
Jun 5 23:02:11 2007
** ld 8065c90 Outstanding Requests:
*
msgid 1, origid 1, status InProgress
outstanding referrals
0, parent count 0
** ld 8065c90 Response Queue:
Empty
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
ldap_int_select
read1msg: ld 8065c90 msgid 1 all
1
ber_get_next failed.
ldap_err2string
ldap_test Error while setting
start_tls for ldap server: Can't contact
LDAPserver
ldap_free_request
(origid 1, msgid 1)ldap_free_connection 1
1
ldap_send_unbind
ldap_free_connection: actually freed
./ldap_test
ldaps://w2k3.windows2003.home:389
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_createldap_extended_operation_s
ldap_extended_operation
ldap_send_initial_requestldap_new_connection
1 1 0
ldap_int_open_connectionldap_connect_to_host:
TCP
w2k3.windows2003.home:389
ldap_new_socket: 4
ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:389
ldap_connect_timeout: fd: 4
tm: -1 async: 0
ldap_open_defconn:
successful
ldap_send_server_request
ldap_result ld 8065c90 msgid
1
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
wait4msg ld 8065c90 msgid 1 (infinite
timeout)
wait4msg continue ld 8065c90 msgid 1 all 1
** ld 8065c90
Connections:
* host: w2k3.windows2003.home port: 389
(default)
refcnt: 2 status: Connected
last used: Tue
Jun 5 23:00:34 2007
** ld 8065c90 Outstanding Requests:
*
msgid 1, origid 1, status InProgress
outstanding referrals
0, parent count 0
** ld 8065c90 Response Queue:
Empty
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
ldap_int_select
read1msg: ld 8065c90 msgid 1 all
1
read1msg: ld 8065c90 msgid 1 message type extended-result
new
result: res_errno: 0, res_error: <>, res_matched:
<>
read1msg: ld 8065c90 0 new referrals
read1msg: mark request
completed, ld 8065c90 msgid 1
request done: ld 8065c90 msgid 1
res_errno:
0, res_error: <>, res_matched: <>
ldap_free_request (origid 1,
msgid 1)
ldap_free_connection 0 1
ldap_free_connection: refcnt
1
ldap_parse_extended_result
ldap_parse_result
ldap_msgfree
TLS
trace: SSL_connect:before/connect initialization
TLS trace:
SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3 read
server hello A
TLS certificate verification: depth: 0, err:
20,
subject:/CN=w2k3.windows2003.home,
issuer:/DC=home/DC=windows2003/CN=Windows2003CA
TLS
certificate verification: Error, unable to get local
issuer
certificate
TLS trace: SSL3 alert write:fatal:unknown CA
TLS
trace: SSL_connect:error in SSLv3 read server certificate B
TLS trace:
SSL_connect:error in SSLv3 read server certificate B
TLS: can't
connect.
ldap_err2string
ldap_free_connection 1
1
ldap_send_unbind
ldap_free_connection: actually freed
With
~/.ldaprc
TLS_REQCERT ALLOW
./ldap_test ldaps://w2k3.windows2003.home:389
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_createldap_extended_operation_sldap_extended_operationldap_send_initial_requestldap_new_connection
1
1 0ldap_int_o
pen_connection
ldap_connect_to_host: TCP
w2k3.windows2003.home:389
ldap_new_socket: 4ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:389
ldap_connect_timeout: fd: 4
tm: -1 async: 0ldap_open_defconn:
successful
ldap_send_server_request
ldap_result ld 8065c90 msgid
1
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
wait4msg ld 8065c90 msgid 1 (infinite
timeout)
wait4msg continue ld 8065c90 msgid 1 all 1
** ld 8065c90
Connections:
* host: w2k3.windows2003.home port: 389
(default)
refcnt: 2 status: Connected
last used: Tue
Jun 5 23:04:26 2007
** ld 8065c90 Outstanding Requests:
* msgid
1, origid 1, status InProgress
outstanding referrals 0,
parent count 0
** ld 8065c90 Response Queue:
Empty
ldap_chkResponseList ld 8065c90 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c90 NULL
ldap_int_select
read1msg: ld 8065c90 msgid 1 all
1
read1msg: ld 8065c90 msgid 1 message type extended-result
new
result: res_errno: 0, res_error: <>, res_matched:
<>
read1msg: ld 8065c90 0 new referrals
read1msg: mark request
completed, ld 8065c90 msgid 1
request done: ld 8065c90 msgid 1res_errno: 0,
res_error: <>, res_matched:
<>
ldap_free_request (origid 1,
msgid 1)
ldap_free_connection 0 1
ldap_free_connection: refcnt
1
ldap_parse_extended_result
ldap_parse_result
ldap_msgfree
TLS
trace: SSL_connect:before/connect initialization
TLS trace:
SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3 read
server hello A
TLS certificate verification: depth: 0, err:
20,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, unable to get local issuer
certificateTLS certificate
verification: depth: 0, err: 27,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, certificate not trusted
TLS certificate verification:
depth: 0, err: 21,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, unable to verify the first
certificate
TLS trace:
SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read
server certificate request A
TLS trace: SSL_connect:SSLv3 read server done
A
TLS trace: SSL_connect:SSLv3 write client certificate A
TLS trace:
SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:SSLv3
write change cipher spec A
TLS trace: SSL_connect:SSLv3 write finished
A
TLS trace: SSL_connect:SSLv3 flush data
TLS trace: SSL_connect:SSLv3
read finished A
TLS trace: SSL3 alert write:warning:bad certificate
TLS:
unable to get peer
ertificate.
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_send_server_request
ldap_result
ld 8065c90 msgid 2
ldap_chkResponseList ld 8065c90 msgid 2 all
1
ldap_chkResponseList returns ld 8065c90 NULL
wait4msg ld 8065c90 msgid 2
(infinite timeout)
wait4msg continue ld 8065c90 msgid 2 all 1
** ld
8065c90 Connections:
* host: w2k3.windows2003.home port: 389
(default)
refcnt: 2 status: Connected
last used: Tue
Jun 5 23:04:26 2007
** ld 8065c90 Outstanding Requests:
* msgid
2, origid 2, status InProgress
outstanding referrals 0,
parent count 0
** ld 8065c90 Response Queue:
Empty
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ldap_debug = -1 /*LDAP_DEBUG_ANY */ ;
(void) ldap_set_option(NULL,
LDAP_OPT_DEBUG_LEVEL, &ldap_debug);
ldap_initialize(ld,argv[1]);
val = LDAP_VERSION3;
(void)ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &val);
(void)ldap_set_option(ld, LDAP_OPT_REFERRALS , LDAP_OPT_ON);
val =
LDAP_OPT_X_TLS_ALLOW;
ldap_set_option (ld,LDAP_OPT_X_TLS,
&val);
.
.
.
./ldap_test ldaps://w2k3.windows2003.home:636
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_create
ldap_url_parse_ext(ldaps://w2k3.windows2003.home:636)
ldap_err2string
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection
1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP
w2k3.windows2003.home:636
ldap_new_socket: 4
ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:636
ldap_connect_timeout: fd: 4
tm: -1 async: 0
TLS trace: SSL_connect:before/connect initialization
TLS
trace: SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3
read server hello A
TLS certificate verification: depth: 0, err:
20,
subject:/CN=w2k3.windows2003.home,
issuer:/DC=home/DC=windows2003/CN=Windows2003CA
TLS
certificate verification: Error, unable to get local
issuer
certificate
TLS trace: SSL3 alert write:fatal:unknown CA
TLS
trace: SSL_connect:error in SSLv3 read server certificate B
TLS trace:
SSL_connect:error in SSLv3 read server certificate B
TLS: can't
connect.
ldap_err2string Can'tcontact LDAP server
./ldap_test
ldaps://w2k3.windows2003.home:389
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_create
ldap_url_parse_ext(ldaps://w2k3.windows2003.home:389)
ldap_err2string
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection
1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP
w2k3.windows2003.home:389
ldap_new_socket: 4
ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:389
ldap_connect_timeout: fd: 4
tm: -1 async: 0
TLS trace: SSL_connect:before/connect initialization
TLS
trace: SSL_connect:SSLv2/v3 write client hello A
TLS: can't
connect.
ldap_err2string Can'tcontact LDAP server
With
~/.ldaprc
TLS_REQCERT ALLOW
./ldap_test ldaps://w2k3.windows2003.home:636
"DC=WINDOWS2003,DC=HOME""CN=Markus,CN=USERS,DC=WINDOWS2003,DC=HOME"
Passwd
ldap_create
ldap_url_parse_ext(ldaps://w2k3.windows2003.home:636)
ldap_err2string
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection
1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP
w2k3.windows2003.home:636
ldap_new_socket: 4
ldap_prepare_socket:
4
ldap_connect_to_host: Trying 192.168.1.5:636
ldap_connect_timeout: fd: 4
tm: -1 async: 0
TLS trace: SSL_connect:before/connect initialization
TLS
trace: SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3
read server hello A
TLS certificate verification: depth: 0, err:
20,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, unable to get local issuer
certificateTLS certificate
verification: depth: 0, err: 27,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, certificate not trusted
TLS certificate verification:
depth: 0, err: 21,
subject:/CN=w2k3.windows2003.home,
issuer:
/DC=home/DC=windows2003/CN=Windows2003CA
TLS certificate
verification: Error, unable to verify the first
certificateTLS trace:
SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read
server certificate request A
TLS trace: SSL_connect:SSLv3 read server done
A
TLS trace: SSL_connect:SSLv3 write client certificate A
TLS trace:
SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:SSLv3
write change cipher spec ATLS trace:
SSL_connect:SSLv3 write finished
A
TLS trace: SSL_connect:SSLv3 flush data
TLS trace: SSL_connect:SSLv3
read finished A
TLS trace: SSL3 alert write:warning:bad certificate
TLS:
unable to get peer certificate.
ldap_open_defconn:
successful
ldap_send_server_request
ldap_result ld 8065c58 msgid
1
ldap_chkResponseList ld 8065c58 msgid 1 all 1
ldap_chkResponseList
returns ld 8065c58 NULL
wait4msg ld 8065c58 msgid 1 (infinite
timeout)
wait4msg continue ld 8065c58 msgid 1 all 1
** ld 8065c58
Connections:
* host: w2k3.windows2003.home port: 636
(default)
refcnt: 2 status: Connected
last used: Tue
Jun 5 22:55:02 2007
** ld 8065c58 Outstanding Requests:
*
msgid 1, origid 1, status InProgress
outstanding referrals
0, parent count 0
** ld 8065c58 Response Queue:
Empty