LDAP + TLS - 两台机器上的不同行为

LDAP + TLS - 两台机器上的不同行为

机器:

  1. debian wheezy
  2. suse 11

命令:

  1. ldapsearch -ZZ -h ad.unsw.edu.au -x
  2. perl -we "use Net::LDAP; print Net::LDAP->new ('ad.unsw.edu.au')->start_tls(verify => 'require', capath => '/etc/ssl/certs/')->{errorMessage}"

结果:

  • 机器 1,命令 1:TLS:主机名与对等证书中的 CN 不匹配
  • 机器 1,命令 2:有效
  • 机器 2,命令 1:有效
  • 机器 2,命令 2:无法确定对等主机名以进行验证

我无法解释这种不一致,我真的希望命令 2 能够在机器 2 上运行。有什么想法吗?

经过 strace 之后,看起来 debian-ldapsearch 正在查看,/etc/ssl/certs/ca-certificates.crt而 suse-ldapsearch 什么都没查看。debian-Net::LDAP正在查看/etc/ssl/certs/157753a5.?AddTrust_External_Root.pem),而 suse-Net::LDAP什么都没查看。

答案1

您应该检查远程 SSL 证书的主题的“CN”部分是否与命令中的 LDAPS 服务器的主机名相同(ad.unsw.edu.au)。

要查看远程证书,请使用:

echo ""|openssl s_client -connect ad.unsw.edu.au:636 |openssl x509 -noout -subject -dates -issuer

详细信息:

echo ""|openssl s_client -connect ad.unsw.edu.au:636 |openssl x509 -noout -text

检查颁发者的根证书是否已导入并受 LDAP 信任(请参阅OpenLDAP SSL文档)和 perl SSL 密钥库(请参阅IO::套接字::SSL)。如果是自签名证书,则应将该证书添加到受信任的 SSL 钥匙串中。

答案2

Net::LDAP::start_tls() 在 perl-ldap-0.43 中已损坏。如果您升级到 0.44 或更高版本,您的命令行应该可以正常工作。这记录在 Changes 文件中:

http://cpansearch.perl.org/src/MARSCHAP/perl-ldap-0.44/Changes

Bug Fixes
 * un-break certificate verification

答案3

Net/LDAP.pm0.43中的第 233 行Net::LDAP表示

SSL_verifycn_scheme => "ldap",

debian wheezy 使用的是 0.40,但是从不稳定版本升级到 0.43 也会破坏它。

https://rt.cpan.org/Public/Bug/Display.html?id=70795

相关内容