Does anybody have some sample code of how to use  LDAP_OPT_X_TLS_ALLOW in a 
client program with ldap_start_tls_s ?

Is it a bug if it doesn't work ?

Thank you
Markus
  ----- Original Message ----- 
  From: Markus Moeller 
  To: [email protected] 
  Sent: Friday, June 08, 2007 11:00 PM
  Subject: [-SPAM-] Question about ldap_init, ldap_initialize, 
start_tls,LDAP_OPT_X_TLS_ALLOW and TLS/SSL




  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



Reply via email to