我正在尝试在Perl中使用Net :: LDAP对我的Server 2008 Active Directory进行LDAPS身份验证,并且我很难让服务器验证工作。它适用于start_tls
我使用verify=> 'none'
,但这不是很好。
当我使用verify => 'require'
(这是可取的)时,我收到此错误:
SSL连接尝试失败且出现未知错误错误:0D0C50A1:asn1编码例程:ASN1_item_verify:未知消息摘要算法位于./ldap.pl第23行,第522行。
当我使用Openssl s_client从命令行进行测试时,它工作得很好,所以我不认为这是一个OpenSSL问题。我有点像Perl的菜鸟,所以我不确定还有什么可以调试。
以下是相关的代码段:
#!/usr/bin/perl
use Net::LDAP;
$ldap = Net::LDAP->new('ho.mydomain.com',
) or die "LDAP error";
$mesg = $ldap->start_tls(
sslversion => 'tlsv1',
verify => 'require',
capath => '/etc/ssl/certs/',
);
die $mesg->error if $mesg->is_error;
OpenSSL s_client的输出:
New, TLSv1/SSLv3, Cipher is AES128-SHA Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : AES128-SHA Session-ID: [removed] Session-ID-ctx: Master-Key: [removed] Key-Arg : None Start Time: 1278707544 Timeout : 300 (sec) Verify return code: 0 (ok)
非常感谢任何帮助。
由于
答案 0 :(得分:0)
在验证整个证书链时,您确定s_client正常 (通过-verify
选项)吗?
“未知消息摘要算法”表示链中的某些加密元素不支持在受信任根路径中某些证书的摘要哈希值。
可能是中间证书或根证书正在使用有问题的哈希算法(如果你有一个旧的openssl,可能是sha256,如果你有一个新的openssl,可能是真的很旧)。
确保您拥有最近的openssl库。有关这种情况的一个示例,请参阅http://bugs.gentoo.org/294615。