我想在Perl中使用Net :: LDAP来对我的Server 2008 Active Directory执行LDAPS身份验证,而且我很难让服务器验证工作。它在start_tls
,我使用verify=> 'none'
,但它不是很好。在Perl-LDAP中使用StartTLS
当我使用verify => 'require'
(这是优选的),我得到这个错误:
SSL connect attempt failed with unknown error error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm at ./ldap.pl line 23, line 522.
当我从使用OpenSSL的s_client.First它的伟大工程的命令行测试,所以我不认为这是一个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.First输出:
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)
任何帮助将不胜感激。
感谢
有趣的是,感谢您的输入!我认为验证正在整个链上工作,s_client不会给出任何错误。这里是输出的顶部: 连接(00000003) depth = 1/DC = com/DC = mydomain/DC = ho/CN = DC01 验证返回:1 depth = 0 /CN=dc03.ho。 mydomain.com 验证返回:1支 --- 证书链 0 S:/CN=dc03.ho.mydomain.com I:/ DC = COM/DC = MYDOMAIN/DC = HO/CN = DC01 - - 我的openssl版本是0.9.8h。 再次感谢, – Tracert 2010-07-09 21:20:22
那么,那是一个死胡同。 再次尝试:您是否具有安装Perl-LDAP的所有先决条件?具体来说,如果服务器提供DIGEST-MD5 SASL认证,则需要安装Digest :: MD5。 – Borealid 2010-07-09 21:43:38
另外,请确保使用LDAP v3。真的没有理由不想这样做。 'Net :: LDAP-> new('ho.mydomain.com',version => 3);' – Borealid 2010-07-09 21:45:18