On 31 Mar 2010, at 19:25, Prentice Bisbal wrote:

> 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.

No, all it means is that the certificate chain is trusted, ie is signed by a CA 
that you trust.

The rules for checking the hostname matches are more complex than you describe, 
but luckily it seems that IO::Socket::SSL has a verify_hostname method that 
should do what is needed. eg:

$ldap = Net::LDAP->new("hostname") or die;
[...start_tls etc...]
$ldap->socket->verify_hostname("hostname", "ldap") || die "Hostname 
verification error";

We should either document this, or (my preference) add code to call 
verify_hostname ourselves.

Cheers,

Chris


Reply via email to