私は多くのサイトで多くのスレッドを読みましたが、まだこれを機能させることができません。
私はPerl5.12.4を実行しているOpenSSL0.9.8r、LWP 6.0.4、更新されたCrypt :: SSLeay、Net :: SSLなどを備えたクライアントマシン(OSX)を持っています。HTTPSサイト(https:/例では/github.com)WindowsVMで実行しているWinGateプロキシ経由。私の実際のアプリケーションは、私が制御できないSSLWebサービスに接続していることに注意してください。
Firefoxから、プロキシを指すと、すべてが共食いです。ページが正常に読み込まれ、プロキシソフトウェアのアクティビティモニターに接続が表示されます。私はそれをPerlで動作させることができればとんでもないでしょう。このスタックオーバーフローのコードから始めました質問:LWPにHTTPSリクエストにCrypt :: SSLeayを使用させるにはどうすればよいですか?そして、いくつかのデバッグと追加の出力を追加しました。これが私が今立っているところです:
#!/usr/bin/perl
use strict;
use warnings;
use Net::SSL (); # From Crypt-SSLeay
BEGIN {
$Net::HTTPS::HTTPS_SSL_SOCKET_CLASS = "Net::SSL"; # Force use of Net::SSL
$ENV{HTTPS_PROXY} = 'https://192.168.1.11:80';
# $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$ENV{HTTPS_DEBUG} = 1; #Add debug output
}
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('GET','https://github.com/');
my $response = $ua->request($req);
print "--\n";
print "$_\n" for grep { $_ =~ /SSL/ } keys %INC;
print "--\n";
if ($response->is_success) {
print $response->decoded_content; # or whatever
exit(0);
}
else {
print "\nFail:\n";
print $response->status_line ."\n";
exit(1);
}
このコードからの出力は次のとおりです。
--
Crypt/SSLeay.pm
Crypt/SSLeay/X509.pm
Net/SSL.pm
--
Fail:
500 Can't connect to github.com:443 (Crypt-SSLeay can't verify hostnames)
その後コメント$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
を外すと、プロキシ上のgithub.com:443への単一の接続が表示されますが、何も表示されません。(Webブラウザからプロキシを介してうまく機能することに注意してください)。多くのハングアップの後、スクリプトから次の出力が得られます。
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:failed in SSLv3 read server hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv2 write client hello A
SSL_connect:failed in SSLv2 read server hello A
--
Crypt/SSLeay.pm
Crypt/SSLeay/X509.pm
Net/SSL.pm
Crypt/SSLeay/CTX.pm
Crypt/SSLeay/MainContext.pm
--
Fail:
500 SSL negotiation failed:
誰かがここでいくつかの方向性を提供することができれば、私はそれを大いに感謝します!