我正在与 Net::LDAP 建立以下 LDAP 连接:
my $ldap = Net::LDAP->new( $ldap_host, version => 3 );
my $mesg = $ldap->start_tls(
verify => 'none',
);
$mesg = $ldap->bind( $dn, password => $ldappass );
这将起作用,甚至让我稍后进行查询以检查用户的凭据。但是如果我尝试验证服务器证书:
my $ldap = Net::LDAP->new( $ldap_host, version => 3 );
my $mesg = $ldap->start_tls(
verify => 'require',
cafile => '/var/certs/Certificate_Bundle.pem'
);
$mesg = $ldap->bind( $dn, password => $ldappass );
它将成功建立连接并验证服务器证书,但在尝试绑定操作时,我得到以下 LDAP 消息参数:
'resultCode' => 82,
'pdu' => '0O`J3cn=foo1,ou=foo2,dc=foo3Passwd',
'errorMessage' => 'Bad file descriptor'
我很惊讶,因为结果代码 82 被定义为 LDAP_LOCAL_ERROR,但所有证书位似乎都有效。如果我将“cafile”参数更改为错误值,它将失败并显示“I/O 错误连接由对等方重置”错误消息。
有任何想法吗?提前致谢。
更新:我刚刚意识到证书验证不成功。LDAP 服务器使用的证书不是我被告知的证书。我意识到通过使用 openssl 来监控握手过程:
openssl s_client -connect *server:port* -showcerts -state
在那里你可以看到服务器正在有效使用的证书。