It's my understanding that using LDAPS->new or $ldap->start_tls with the
option

verify => 'require'

Should verify that the host name should be checked and fail if it's not
an exact match. From my experience with websites, TLS/SSL requires that
if the cert contains the FQDN for the server, the verification will fail
if the name in the web-browsers address doesn't also have the FQDN.

I wrote a program using the code below. The cert for the LDAP server has
the FQDN (ldap1.domain.tld), however when I call the program with
hostname specified as "ldap1", I do not get any kind of verification
error. ldap1 doesn't not allow any unencrypted traffic at all, so I know
I must be connecting over SSL/TLS or I would have gotten a
"confidentiality required" error from the server.

NOTE: In my previous e-mail, I left out a section of the code. This
e-mail includes all the code. Sorry for the screw-up:

It's my understanding that using LDAPS->new or $ldap->start_tls with the
option

verify => 'require'

Should verify that the host name should be checked and fail if it's not
an exact match. From my experience with websites, TLS/SSL requires that
if the cert contains the FQDN for the server, the verification will fail
if the name in the web-browsers address doesn't also have the FQDN.

I wrote a program using the code below. The cert for the LDAP server has
the FQDN (ldap1.domain.tld), however when I call the program with
hostname specified as "ldap1", I do not get any kind of verification
error. ldap1 doesn't not allow any unencrypted traffic at all, so I know
I must be connecting over SSL/TLS or I would have gotten a
"confidentiality required" error from the server.

Am I doing something wrong, or have an incorrect understanding of how
SSL/TLS works in this case?

# Step 1:
# Try to connect. If we fail here, exit with return code 2
if (($port == 636)||($ssl)) {
    if ($verbose) {
        print "Connecting with scheme = ldaps\n";
    }
    if (!$port) {
        $port = '389';
    }
    $ldap = Net::LDAP->new($hostname,
                           port => $port,
                           scheme => 'ldaps',
                           timeout => $timeout,
                           verify => 'require',
                           cafile => $cafile
                           ) || exit (2);
}  else {
     if ($verbose) {
        print "Connecting with scheme = ldap\n";
    }
    $ldap = Net::LDAP->new($hostname,
                           port => $port,
                           scheme => 'ldap',
                           timeout => $timeout
                           ) || exit (2);
}

# Step 1b:
# If starttls is specified, try to starttls.
# If if we fail, exit status = 2
if ($starttls) {
    if ($verbose) {
    print "Starting TLS\n";
}
    $mesg = $ldap->start_tls(verify => 'require',
                             cafile => $cafile
                             );
    $code = $mesg->code;
    if ($code != 0) {
        $error = $mesg->error;
        print "Could not start TLS\n";
        print "$error\n";
        $exit_val = '2';
    }
}


-- 
Prentice Bisbal
Linux Software Support Specialist/System Administrator
School of Natural Sciences
Institute for Advanced Study
Princeton, NJ

Reply via email to