Linux
LDAP + TLS - 兩台機器上的不同行為
機器:
- Debian 喘息
- 使用 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
正在查看任何內容。
您應該檢查遠端 SSL 證書的主題“CN”部分是否與您的命令 (ad.unsw.edu.au) 中的 LDAPS 伺服器的主機名相同。
要查看遠端證書,請使用:
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::Socket::SSL)中導入並受信任。如果它是自簽名證書,則應將該證書添加到受信任的 SSL 鑰匙串中。
Net::LDAP::start_tls() 在 perl-ldap-0.43 中被破壞。如果您升級到 0.44 或更高版本,您的命令行應該可以正常工作。這記錄在更改文件中:
http://cpansearch.perl.org/src/MARSCHAP/perl-ldap-0.44/Changes
Bug Fixes * un-break certificate verification