2016-09-28 2 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이 순 :: 0.05

을 LDAPS ... : ~/test_perl $ perlmodver Net :: LDAP 0.39

... : ~/test_perl $ perlmodver IO :: 소켓 :: SSL 1.18

+0

ldapsearch를 사용하여 서버에 연결할 수 있습니까? –

+0

모듈의 8 년 된 버전을 사용하고 있습니다.이 모든 모듈의 최신 버전이 있습니다. 당신이 이것을 시도 했습니까? –

+0

@ChankeyPathak 텔넷을 사용하여 AD 컴퓨터의 포트 636에 연결할 수 있습니다. 또한, 동일한 펄 스크립트는 모든 모듈이 동일한 유사한 시스템에서 완벽하게 실행됩니다. – user1726707

답변

0

이 문제는 해결되었습니다. 검증 (권장하지 않음)

당신은이 "확인"내 코드에서처럼 속성을 사용하는 경우, 당신은 단지 언급해야

바이 패스 :

는이 문제를 해결하는 두 가지 방법이 있습니다 그것. 인증서 확인을 무시합니다.

는 명쾌한에 그것이 잘 작동했기 때문에 어쩌면 그것은, 믿을 수있는 특정 행동이다 인증서

에 소프트 링크를 추가합니다. 따라서 모든 pem 파일에 대한 소프트 링크를 만들어 CA 경로에 배치해야합니다. 실행할 수 있습니다.

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

이 해시는 신뢰할 수있는 CA에 대해 디렉터리를 사용할 때 명료하고 신뢰할 수있는 데 필요합니다. 그러나 해시 알고리즘 (결과 파일 이름)이 openssl 버전에서 변경 되었더라도 똑같은 해시를 사용하여 명쾌하고 신뢰할 수있는 것일 수도 있습니다. CA에 대한 디렉토리 대신 파일을 사용할 때이 문제점의 영향을받지 않습니다. –

1

오류를 보면 인증서 확인에 실패했음을 알 수 있습니다.

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

은 당신이 중 하나는 인증서를 수정하거나 $ad_host에 접두사로 ldaps://을 전달하는 경우, 당신은 또한 Net::LDAP를 사용할 수있는 (!) 참고에

verify => 'none' 

를 전달하여 인증서 확인을 무시할 수 있습니다.


아차

$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을 사용하여 서버에 연결할 수 있습니까?

관련 문제