![Centos 7로 업그레이드한 후 lwp 요청이 실패함](https://linux55.com/image/46963/Centos%207%EB%A1%9C%20%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%95%9C%20%ED%9B%84%20lwp%20%EC%9A%94%EC%B2%AD%EC%9D%B4%20%EC%8B%A4%ED%8C%A8%ED%95%A8.png)
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;