Hi,
I have had a problem with connecting to my ldap server using SSL.
I use a test tool called ldapbrowser to test connectivity whenever I do
anything with LDAP, connecting to port 389, this is not a problem, using the
same DN etc. I can also connect to port 636 securely to both my ldap servers
by importing the certificates into the keystore using the keytool.
I am currently using:
ldapcsdk-6.02-SunOS5.10_sparc_OPT
and:
ldapcsdk5.08-SunOS5.6_OPT.OBJ
i can connect using port 389 and make a successful bind, but if i try to
connect to port 636 i get the following error:
Error - ldap_simple_bind_s
the return value is:
51
or
81 Decimal
I haven't checked for any LDAP Server debug log as I assumed it was all ok
as ldapbrowser seems to connect fine. I generated my certificates in the
following way:
1. created a CA
2. created a server certificate signed with the CA
3. imported into a cert7.db and key3.db
this is what I used to setup a Sun One LDAP Server, further details:
nss-3.4.2.tar.gz
nspr-4.2.2.tar.gz
untar'd both nss-3.4.2.tar.gz and nspr-4.2.2.tar.gz to the same folder
/usr/tmp/combind/certutil -N -d /tmp/cert7/
/usr/tmp/combine/certutil -A -n CAcert -t "PTCu,PTCu,PTCu" -i
/tmp/CAcert.cert -d /tmp/cert7/
/usr/sfw/bin/certutil -A -n Servercert -t
"PTCu,PTCu,PTCu" -i/tmp/Servercert.cert -d /tmp/cert7/
then I use the following client code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include "ldap.h"
#include "ldap_ssl.h"
#define BIND_DN
"uid=sbrown,ou=Administrators,ou=TopologyManagement,o=NetscapeRoot"
#define BIND_PW "password"
#define MY_CERTDB_PATH "/tmp/ssl"
#define MY_KEYDB_PATH "/tmp/ssl"
#define DEBUG_LOG "/tmp/ssl/ssl.log"
#define HOSTNAME "hostname"
#define SSL_PORT_NUMBER 636
#define PORTNUMBER 389
int ldap_ssl_validate(char *username, char *password);
int log(char *message);
int main(){
int rc = 0;
rc = ldap_ssl_validate("sbrown", "password");
if (rc != 0){
printf("The Error code returned is HEX VALUE: %x and DEC
VALUE: %d\n", rc, rc);
}
else{
printf("No Error Occurred!\n");
}
return 0;
}
int ldap_ssl_validate(char * username, char * password)
{
LDAP *ld;
LDAPMessage *result, *e, *res;
int rc,version;
int max_ret;
char dn[512] = {'\0'};
/* Initialize the client */
if ( rc = ldapssl_clientauth_init( MY_CERTDB_PATH, NULL, 1,
MY_KEYDB_PATH, NULL ) < 0 ) {
log("Error - ldapssl_client_init");
perror( "ldapssl_client_init" );
return( rc );
}
printf("> ldap_client_init - Success!\n");
if ( (ld = ldapssl_init( HOSTNAME, SSL_PORT_NUMBER, 1 )) == NULL ) {
perror( "ldap_init" );
return( -1 );
}
printf("> ldapssl_init - Success! \n");
version = LDAP_VERSION3;
if ( ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ) < 0 )
{
ldap_perror( ld, "ldap_set_option LDAPv3" );
ldap_unbind( ld );
return( -1 );
}
rc = ldap_simple_bind_s( ld, BIND_DN, password );
if ( rc != LDAP_SUCCESS ) {
log("Error - ldap_simple_bind_s");
printf("Error - ldap_simple_bind_s\n");
return( rc );
}
/* STEP 3: Disconnect from the server. */
ldap_unbind( ld );
log("Success - ldap_simple_bind_s");
return( 1 );
}
int log(char *message)
{
FILE *fp;
time_t rawtime;
int err;
fp = fopen(DEBUG_LOG, "wt");
fprintf(fp, "%s > %s\n", ctime(&rawtime), message);
fclose(fp);
return 0;
}
the following truss ouput from the application using:
ldapcsdk-6.02-SunOS5.10_sparc_OPT
<SNIP>
stat("/lib/libatomic.so", 0xFFBFF380) Err#2 ENOENT
stat("/usr/lib/libatomic.so", 0xFFBFF380) Err#2 ENOENT
stat("/usr/local/lib/libatomic.so", 0xFFBFF380) Err#2 ENOENT
stat("/usr/lib/secure/libatomic.so", 0xFFBFF380) Err#2 ENOENT
write(1, " > l d a p s s l _ i n".., 27) = 27
brk(0x000557C0) = 0
brk(0x000577C0) = 0
open("/etc/netconfig", O_RDONLY|O_LARGEFILE) = 5
fcntl(5, F_DUPFD, 0x00000100) = 256
close(5) = 0
read(256, " # p r a g m a i d e n".., 1024) = 1024
read(256, " t s t p i _ c".., 1024) = 215
read(256, 0x000551F8, 1024) = 0
lseek(256, 0, SEEK_SET) = 0
read(256, " # p r a g m a i d e n".., 1024) = 1024
read(256, " t s t p i _ c".., 1024) = 215
read(256, 0x000551F8, 1024) = 0
close(256) = 0
open("/dev/udp", O_RDONLY) = 5
ioctl(5, SIOCGLIFNUM, 0xFFBFED14) = 0
close(5) = 0
brk(0x000577C0) = 0
brk(0x000597C0) = 0
open64("/var/run/name_service_door", O_RDONLY) = 5
fcntl(5, F_SETFD, 0x00000001) = 0
door_info(5, 0xFEE6F7E8) = 0
door_call(5, 0xFFBFCC78) = 0
door_info(5, 0xFFBFCC90) = 0
door_call(5, 0xFFBFCC78) = 0
brk(0x000597C0) = 0
brk(0x0005B7C0) = 0
open("/etc/default/nss", O_RDONLY|O_LARGEFILE) = 6
fcntl(6, F_DUPFD, 0x00000100) = 256
close(6) = 0
read(256, " # i d e n t\t " @ ( #".., 1024) = 1024
read(256, " y t h o s e\n # f u n".., 1024) = 211
read(256, 0x000551F8, 1024) = 0
close(256) = 0
so_socket(PF_INET, SOCK_STREAM, IPPROTO_IP, "", SOV_DEFAULT) = 6
fcntl(6, F_GETFL) = 2
fcntl(6, F_SETFL, FWRITE|FNONBLOCK) = 0
connect(6, 0xFFBFF5B8, 16, SOV_DEFAULT) Err#150 EINPROGRESS
pollsys(0xFFBFF2F0, 1, 0xFFBFF278, 0x00000000) = 1
getsockopt(6, SOL_SOCKET, SO_ERROR, 0xFFBFF218, 0xFFBFF21C, SOV_DEFAULT) = 0
brk(0x0005B7C0) = 0
brk(0x0005F7C0) = 0
brk(0x0005F7C0) = 0
brk(0x000637C0) = 0
getpeername(6, 0xFFBFF5C8, 0xFFBFF564, SOV_DEFAULT) = 0
time() = 1201294867
getpeername(6, 0xFFBFF4F8, 0xFFBFF494, SOV_DEFAULT) = 0
time() = 1201294867
brk(0x000637C0) = 0
brk(0x000677C0) = 0
write(6, "80 4010301\01B\0\0\010\0".., 54) = 54
read(6, "160301", 3) = 3
read(6, "07D7", 2) = 2
brk(0x000677C0) = 0
brk(0x0006B7C0) = 0
read(6, "02\0\0 F0301\0\0 k mE2 A".., 2007) = 2007
brk(0x0006B7C0) = 0
brk(0x0006D7C0) = 0
brk(0x0006D7C0) = 0
brk(0x0006F7C0) = 0
lseek(3, 16384, SEEK_SET) = 16384
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0".., 8192) = 8192
brk(0x0006F7C0) = 0
brk(0x000717C0) = 0
brk(0x000717C0) = 0
brk(0x000737C0) = 0
brk(0x000737C0) = 0
brk(0x000757C0) = 0
brk(0x000757C0) = 0
brk(0x000777C0) = 0
write(6, "150301\00202 0", 7) = 7
time() = 1201294867
open("/tmp/ssl/ssl.log", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 7
brk(0x000777C0) = 0
brk(0x000797C0) = 0
open("/usr/share/lib/zoneinfo/GB", O_RDONLY) = 8
fstat64(8, 0xFFBFF788) = 0
read(8, " T Z i f\0\0\0\0\0\0\0\0".., 1323) = 1323
close(8) = 0
fstat64(7, 0xFFBFEBD0) = 0
brk(0x000797C0) = 0
brk(0x0007B7C0) = 0
fstat64(7, 0xFFBFEA78) = 0
ioctl(7, TCGETA, 0xFFBFEB5C) Err#25 ENOTTY
write(7, " T h u J a n 1 0".., 55) = 55
close(7) = 0
write(1, " E r r o r - l d a p".., 27) = 27
write(1, " T h e E r r o r c o".., 59) = 59
_exit(0)
</SNIP>
thats not all of it, just the bottom end,
there are libatomic.so errors throughout, I had a problem earlier compiling
the Mozilla LDAP SDK with a libatomic.so error, which I didn't overcome as I
used the 6.02 binaries, it has something to do with NSPR which i assumed got
compiled ok when I compiled the NSS source that included it.
I also have a fear that its certificate related even though the Sun One
Server recognises the certifcates in the Sun One Management console and
ldapbrowser can connect i think that it may not be right for the client SDK,
any ideas or analysis on this would be most appreciated,
regards
Stephen
_______________________________________________
dev-tech-ldap mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-ldap