2014-11-08 1 views
1

[OS에 펄 5.16.2 실행 X 10.9.5]침묵 실패 새로운 인터넷 :: SMTP :: SSL 객체를 생성 할 때

좀 비밀 산타 펄 스크립트가 지금 일년에 한 번 털어하고 있습니다 이번에는 저에게 번거 로움을 주기로 결정했습니다. (나뿐만 아니라 새 컴퓨터를해야합니까, 그래서 작년과는 다른 환경이 존재한다.) 나는 호출 오전 :

$smtp = Net::SMTP::SSL->new(Host => "mail.mydomain.org", Port => 465); 

을이 반환 될 때, $의 SMTP는 펄 디버거에서 값 ('p $smtp'가없는 단지 $stmp->domain (그리고 $smtp->auth() 같은 빈 줄) 및 후속 액세스) 내가 여기 실종 어떤 오류

Can't call method "domain" on an undefined value at ./secretsanta.pl line 67. 

실패를 표시? 어떤 포인터 주셔서 감사합니다.

편집 : SSL 디버깅 (perl -MIO::Socket::SSL=debug4 secretsanta.pl)의 전원을 켤 때 내가 얻을 :

DEBUG: .../IO/Socket/SSL.pm:1769: Invalid default certificate authority locations 
SSL error: 8606: 1 - error:2006D002:BIO routines:BIO_new_file:system lib 
SSL error: 8606: 2 - error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib 

DEBUG: .../IO/Socket/SSL.pm:1774: Invalid default certificate authority locations error:0200100D:system library:fopen:Permission denied 
DEBUG: .../IO/Socket/SSL.pm:529: socket not yet connected 
DEBUG: .../IO/Socket/SSL.pm:531: socket connected 
DEBUG: .../IO/Socket/SSL.pm:553: ssl handshake not started 
DEBUG: .../IO/Socket/SSL.pm:1769: SSL structure creation failed 

DEBUG: .../IO/Socket/SSL.pm:1774: SSL structure creation failed error:140BA0C3:SSL routines:SSL_new:null ssl ctx 
DEBUG: .../IO/Socket/SSL.pm:1758: IO::Socket::INET configuration failed 

(내 메일 서버의 DNS 이름과 일치하지 않습니다 내 호스팅 회사가 제공하는 SSL의 인증서를 사용하고, 하지만 분명히 작년 변경 뭔가이 작동하지 못하도록하기 위해)

+0

'$!'와'$ IO :: Socket :: SSL :: SSL_ERROR'을 검사하여 실패한 이유를 확인하십시오. –

+0

@SteffenUllrich'$!'는 비어 있고'$ IO :: Socket ...'은'IO :: Socket :: INET6 configuration failed'입니다. – Conrad

+0

@SteffenUllrich'IO :: Socket :: SSL 'inet4' ;'스크립트의 시작 부분에서 에러가 발생했다 IO :: Socket :: INET configuration failed' – Conrad

답변

0

당신이 업그레이드에 의해, 당신은) 처음 아마도 그 버그 중 하나 (에 의해 영향을받는, 여부를 확인 유무 :.

Cpan Bug reports

새로운 컴퓨터 -> 아마도 업데이트 된 버전 -> SMTP 2.35+ 버그 (처음 나열).

아마도 Net :: SMTP 자체를 사용해야할까요?

+0

SSL/TLS는 약 1 개월 된 libnet-3.0 이후 Net :: SMTP에서만 지원되며 IO :: Socket :: SSL의 최신 버전도 필요합니다. –

0

몇 가지 시도했습니다. Windows 용 Perl 5.18.2 (x86)를 설치했고 빈 SMTP-SSL 커넥터를 지나쳤지만 '554 5.7.1 클라이언트 호스트가 거부되었습니다'라는 오류를 해결하는 데 문제가있었습니다. 나는 Mac으로 돌아가 일시적으로 암호를 변경하고 안전하지 않은 Net::SMTP을 사용하여 전자 메일을 보낸 다음 암호를 다시 변경합니다. 분명히 몇 가지 버그가 있었지만 지금 막이 작업을 완료해야했습니다.

0

IO :: 소켓 :: SSL : 최신 버전 인 2.002

. 스크립트를 1 년에 한 번만 실행하면 평균 시간이 많이 바뀌 었습니다.

DEBUG: .../IO/Socket/SSL.pm:1769: Invalid default certificate authority locations 
SSL error: 8606: 1 - error:2006D002:BIO routines:BIO_new_file:system lib 
SSL error: 8606: 2 - error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib 

CA 경로를 찾았지만 사용하는 데 문제가있는 것 같습니다. 문제는이 디렉토리에있는 모든 파일이 실제로 프로그램에서 읽을 수 있는지 확인 값으로 디렉토리와 SSL_ca_path 설정을 반환하면 당신이 뭘 찾았는지 확인하십시오 수, 그

perl -MIO::Socket::SSL -MData::Dumper -e 'warn Dumper({ IO::Socket::SSL::default_ca() })' 

입니다.

(내 메일 서버의 DNS 이름과 일치하지 않습니다 내 호스팅 회사가 제공하는 SSL의 인증서를 사용하고 있지만, 분명히 작년 변경 뭔가이 작동하지 못하도록 할 수 있습니다.)

이것은 분명히 문제를 일으키지 만 첫 번째 문제가 해결되면 해결됩니다.작년에 변경된 사항 중 하나는 IO::Socket::SSL을 사용하는 모듈이 종종 호스트 이름 (Net::SMTP::SSL 포함)에 대한 적절한 확인 스키마를 설정하는 것을 잊었 기 때문에 기본적으로 일종의 호스트 이름 검사를 시행하는 것이 었습니다.

인증서의이 호스트 이름이 대상으로 지정한 호스트 이름과 다른 경우 명시 적으로 SSL_verifycn_name 설정을 사용하여 예상 호스트 이름을 정의해야합니다.

IO::Socket::SSL이 설치된 경우 libnet (CORE 모듈 Net::SMTP, Net::FTP, ...을 제공하는 libnet)이 SSL/TLS를 지원합니다. 여기에는 직접 SSL 및 STARTTLS에 대한 지원이 포함되어 있으므로 Net::SMTP::SSL (직접 SSL 만 해당), Net::SMTP::TLS (STARTTLS 만) 또는 Net::SSLGlue::SMTP (원숭이 패치 Net :: SMTP)을 더 이상 필요로하지 않습니다.