机器:
- debian wheezy
- suse 11
命令:
ldapsearch -ZZ -h ad.unsw.edu.au -x
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.pm
0.43中的第 233 行Net::LDAP
表示
SSL_verifycn_scheme => "ldap",
debian wheezy 使用的是 0.40,但是从不稳定版本升级到 0.43 也会破坏它。