2016-09-28 6 views
1

Net :: LDAPSモジュールを使用してLDAPサーバーに接続しようとしています。私はそれに正しいユーザー名、パスワードとcapathを渡しています。同じバージョンのすべてのモジュールを持つ同じコードが、他のマシンのいずれかで動作します。しかし、この特定のマシンで私はこのエラーを参照してください。SSL ::接続中にNet :: LDAPSが不明なエラーをスローする

私が働いているサンプルコード:

my $ad_host = 'XYZ'; 
my $ad_port = 636; 
my $ad_user = 'ABC'; 
my $ad_pass = '****'; 
my $ca_path = '<path to ca cert>'; 

my $ldap = Net::LDAPS->new(
       $ad_host, 
       port => $ad_port, 
       verify => 'require', 
       capath => $ca_path 
); 

がLDAPSモジュール内の既知のバグですか?あるいは、私は明らかな何かを逃しています。

デバッグログ:私は使用していたモジュールの

DEBUG: .../IO/Socket/SSL.pm:179: set domain to 2 
DEBUG: .../IO/Socket/SSL.pm:1427: new ctx 21295632 
DEBUG: .../IO/Socket/SSL.pm:309: socket not yet connected 
DEBUG: .../IO/Socket/SSL.pm:311: socket connected 
DEBUG: .../IO/Socket/SSL.pm:324: ssl handshake not started 
DEBUG: .../IO/Socket/SSL.pm:354: set socket to non-blocking to enforce timeout=120 
DEBUG: .../IO/Socket/SSL.pm:367: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:377: ssl handshake in progress 
DEBUG: .../IO/Socket/SSL.pm:387: waiting for fd to become ready: SSL wants a read first 
DEBUG: .../IO/Socket/SSL.pm:407: socket ready, retrying connect 
DEBUG: .../IO/Socket/SSL.pm:367: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:377: ssl handshake in progress 
DEBUG: .../IO/Socket/SSL.pm:387: waiting for fd to become ready: SSL wants a read first 
DEBUG: .../IO/Socket/SSL.pm:407: socket ready, retrying connect 
DEBUG: .../IO/Socket/SSL.pm:367: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:1175: SSL connect attempt failed with unknown error..error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

DEBUG: .../IO/Socket/SSL.pm:373: fatal SSL error: SSL connect attempt failed with unknown error..error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
DEBUG: .../IO/Socket/SSL.pm:1462: free ctx 21295632 open=21295632 
DEBUG: .../IO/Socket/SSL.pm:1465: OK free ctx 21295632 
DEBUG: .../IO/Socket/SSL.pm:1175: IO::Socket::INET6 configuration failederror:00000000:lib(0):func(0):reason(0) 

バージョン:

...:〜/ test_perl $ perlmodverネット:: LDAPS 0.05

...: 〜/ test_perl $ perlmodver Net :: LDAP 0.39

...〜/ test_perl $ perlmodver IO ::ソケット:: SSL 1.18

+0

ldapsearchを使用してサーバーに接続できますか? –

+0

8年前のバージョンのモジュールを使用しています。これらのモジュールにはすべて最新バージョンがあります。あなたはこれらを試しましたか? –

+0

@ChankeyPathak私はtelnetで私のADマシンのポート636に接続できました。また、同じperlスクリプトは、すべてのモジュールが同じである同様のマシンで完璧に動作します。 – user1726707

答えて

0

この問題は解決されました。検証(推奨しない)

あなたは「検証」私のコード内の1つのように属性を使用している場合は、あなただけのコメントを持っている

バイパス:

は、これを解決するには2通りの方法がありますそれを出す。証明書検証をバイパスします。

は明快で、それがうまく働いていたので、多分それは、信頼できるに特定の動作である証明書

にソフトリンクを追加します。したがって、すべてのpemファイルへのソフトリンクを作成し、CAパスに配置する必要があります。あなたは実行することでこれを行うことができます

ln -s cacert.pem `openssl x509 -hash -noout < cacert.pem`.0 
+1

これらのハッシュは、信頼できるCAにディレクトリを使用する場合に、明快で信頼できるものの両方に必要です。しかし、ハッシュアルゴリズム(そしてその結果のファイル名)がopensslバージョンで変更されたとしても、同じハッシュを明快で信頼できるものとして使用していた可能性があります。 CAのディレクトリの代わりにファイルを使用する場合、この問題の影響を受けません。 –

1

エラーを確認すると、証明書の確認に失敗したことがわかります。あなたは$ad_hostに接頭辞としてldaps://を渡す場合

SSL connect attempt failed with unknown error..error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

あなたが証明書を修正または追記で

verify => 'none' 

を渡すことで、証明書の検証を無視するか、あなたもNet::LDAPを使用することができます。


おっと

$ldaps = Net::LDAP->new('ldaps://myhost.example.com:10000', 
         verify => 'require', 
         capath => $ca_path); 

はちょうどあなたが

The same code with all the modules in the same version works on one of my other machines. But on this particular machine I see this error.

が、これは構成の問題のように見えると述べたことに気づきました。 ldapsearchを使用してサーバーに接続できますか?

関連する問題