3

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 );

正常に接続を確立し、サーバー証明書を検証しますが、Bind 操作を試行しているときに、次の LDAP メッセージ パラメータを取得します。

    'resultCode' => 82,
    'pdu' => '0O`J3cn=foo1,ou=foo2,dc=foo3Passwd',
    'errorMessage' => 'Bad file descriptor'

結果コード 82 が LDAP_LOCAL_ERROR として定義されているので驚いていますが、すべての証明書ビットが機能しているようです。「cafile」パラメータを間違った値に変更すると、「I/O Error Connection reset by peer」というエラー メッセージが表示されて失敗します。

何か案は?前もって感謝します。

更新:証明書の検証が成功していないことに気付きました。LDAP サーバーは、私が言われたものとは別の証明書を使用していました。openssl を使用してハンドシェイク プロセスを監視することで、次のことに気付きました。

openssl s_client -connect *server:port* -showcerts -state

サーバーが効果的に使用している証明書が表示されます。

4

0 に答える 0