Centos 7로 업그레이드한 후 lwp 요청이 실패함

Centos 7로 업그레이드한 후 lwp 요청이 실패함

lwp-request가 포함된 centos 6에서 잘 실행되는 bash 스크립트가 있습니다. 시스템을 Centos 7로 업그레이드했는데 요청이 작동하지 않습니다.

# lwp-request -E https://localhost/admin/startup
GET https://localhost/admin/startup
User-Agent: lwp-request/6.03 libwww-perl/6.05

500 Can't connect to localhost:443
Content-Type: text/plain
Client-Date: Sun, 25 Jan 2015 10:24:22 GMT
Client-Warning: Internal response

Can't connect to localhost:443

브라우저를 통해 해당 URL에 접근할 수 있음을 확인했습니다.
내 가정은 이것이 perl-libraries-update 문제라는 것입니다.
lwp-request를 사용하는 SSL/TLS 네트워킹에는 어떤 Perl 라이브러리가 필요합니까?
또는 다음 라이브러리에서 변경된 사항은 다음과 같습니다.

perl-libwww-perl
perl-Crypt-SSLeay

알아채다
Centos 7에서는 관련성이 있을 수 있는 다음과 같은 새 라이브러리를 설치했습니다.

perl-Net-SSLeay
perl-IO-Socket-SSL

답변1

IO::Socket::SSL은 인증서의 이름이 연결하려는 이름과 일치하는지 확인하지만 Crypt::SSLeay는 그렇지 않습니다. 기본적으로 최신 LWP도 인증서 체인을 확인하지만 아마도 이 작업을 수행할 수 있는 이전 LWP 버전을 사용하고 있을 수도 있습니다.

SSL 디버깅을 사용하여 프로그램을 호출하여 문제의 실제 원인을 확인하는 것이 좋습니다.

perl -MIO::Socket::SSL=debug4 program.pl

ssl_opts그런 다음 수행해야 할 검사를 제어할 수 있습니다 . perldoc IO::Socket::SSL옵션에 대한 자세한 내용을 확인하세요.

  • SSL_ca_file자체 서명된 인증서를 사용 중이거나 인증서가 보편적으로 신뢰할 수 있는 루트 CA에서 발급되지 않은 경우에 사용합니다.
  • SSL_verifycn_name인증서에 포함되어야 하는 이름을 설정하는 데 사용됩니다 . 즉, www.example.com인증서에 이름이 있지만 localhost호스트에 연결하는 경우 설정해야 합니다.SSL_verifycn_name => 'www.example.com'
  • 또는 SSL_fingerprint인증서의 지문을 확인하고 다른 확인을 비활성화할 수도 있습니다.
  • 마지막으로 를 사용하여 모든 유형의 유효성 검사를 비활성화할 수 있습니다 SSL_verify_mode. 그러나 이는 해결 방법일 뿐이며 중간자 공격에 취약해지기 때문에 프로덕션 코드에서는 이 작업을 수행해서는 안 됩니다.

ssl_opts를 직접 설정할 수 없으므로 lwp-request다음과 같은 작은 프로그램을 사용하는 것이 좋습니다.

  use LWP::UserAgent;
  my $ua = LWP::UserAgent->new( ssl_opts => { 
      SSL_ca_file => 'myca.pem',
      SSL_verifycn_name => 'www.example.com',
  });
  print $ua->get('https://...')->as_string;

관련 정보