2016-05-16 2 views
0

開発環境およびテスト環境では、XMLRPC Webサービスに自己署名SSL証明書を使用しています。プロダクションは優れたサードパーティの証明書を使用しており、証明書の検証は問題なく動作します。Frontier :: Client/LWPを停止してCGI :: Application WebアプリケーションのSSL証明書を検証する方法は?

CGI :: Applicationウェブアプリケーションである呼び出し側アプリケーションのコードでは、開発者とテスト環境のSSL証明書の確認をスキップして、失敗するかどうかを知り、失敗するか試してみるそれをスキップします。 0に$ ENV {PERL_LWP_SSL_VERIFY_HOSTNAME}を設定するにもかかわらず、呼び出しがまだで失敗します。

Error executing run mode 'myRunMode': 500 Can't connect to mydomain.com:443 (certificate verify failed) 

の束(おそらく、今では非推奨?)他のenv変数が試されていると我々は、このエラーで周りを取得するように見えることはできませんウェブアプリ。コマンドラインで、はすべての同じコードでcertの検証を無視して成功し、我々はすべてのPerlモジュールのバージョンを比較しています(LWPはどちらの場合も6.15です)。

SSLバックエンドが使用されているため、さまざまなシナリオがオンラインで説明されているため、LWP :: Protocol :: httpsのインストールを試したところ、少なくとも異なる動作をしました。私たちは、モジュールがインストールさだけではなく、後にこれで失敗しました:

Error executing run mode 'myRunMode': 404 Not Found 

404はLWPを削除し、悲しいかな、赤ニシンのように思えるが、:: Protocal :: httpsの背中に私たちを取得エラー「証明書の検証に失敗した」ので、私たちは何かに乗っているようです。

このCGI :: Application環境で証明書検証をスキップする方法については、誰も知りませんか?

+1

...

$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0; 

任意のフロンティアコードまたはものを変更する必要はありませアンバンドルされているので、HTTPSの使用を開始するためにもインストールされている必要があります。私の 'L :: P :: https'モジュールを動かすと、LWP :: Protocol :: httpsモジュールがインストールされていると、" LWPはhttps URLをサポートします "エラー。デバッグに役立つひとつのことは、 'perl -MCarp :: Always'が常にスタックトレースを与えることです。 \ n "、$ _、$ INC {$ _}、qx#md5sum $ INC {$ _}#=〜/ ^(%s、>%s) \ S +)/)ソートキー%INC; 'を使用して、実際に使用されているモジュールのリストを表示します。 – mbethke

+0

最新の[LWP :: UserAgent doc](http://search.cpan.org/~ether/libwww-perl-6。libwww-perlコアはSSL用のプロトコルプラグインをバンドルしていないので、https-URLを処理するためのサポートを有効にするには、LWP :: Protocol :: httpsを個別にインストールする必要があります。 – Marcus

+1

はい、それは私の主張でした: 'LWP :: Protocol :: https'はLWPに付属していましたが、ご使用のバージョンではすでに使用されていません。あなたがこのモジュールをインストールしなくても何かが証明書をチェックしているならば、奇妙なことが起こっています。したがって、 '%INC'をダンプする私の提案。 – mbethke

答えて

1

LWP::UserAgent::ssl_opts(verify_hostname => 0);

--- UPDATE 5/17/16 330pm ---あなたが編集フロンティア:: Clientで大丈夫です(または、単にコピー&ペーストして、それに別のを与える場合

パッケージ/ファイル名)は、LWP :: UserAgentの使用を、WWW :: Curl :: Easyで置き換えることができます。これは、私が行ってきたSSLのためのものです(バグのあるライブラリを使用するLWPの古いバージョンがあります)。ここではカールコードは次のとおりです。

あなたもLWPによって返された同じオブジェクトを取得するには、その後HTTP ::対応 - >パース($ rHeadRegexed $ rBodyを。)を使用することができます
my ($rBody,$rHead); # response written here 
my $curl = WWW::Curl::Easy->new(); 
$curl->setopt(CURLOPT_URL, $url); 
$curl->setopt(CURLOPT_HEADER, 0); 
$curl->setopt(CURLOPT_POST, 1); 
$curl->setopt(CURLOPT_POSTFIELDS, $myRequest); 
$curl->setopt(CURLOPT_HTTPHEADER, \@myHeaders); 
$curl->setopt(CURLOPT_WRITEDATA, \$rBody); 
$curl->setopt(CURLOPT_WRITEHEADER, \$rHead); 
$curl->setopt(CURLOPT_FOLLOWLOCATION, 1); 
$curl->setopt(CURLOPT_SSL_VERIFYHOST, 0); 
$curl->setopt(CURLOPT_SSL_VERIFYPEER, 0); 
my $cc = $curl->perform(); 

:: UserAgent->リクエスト(など)。

+0

Frontier :: ClientはLWP :: UserAgentを内部的に使用しており、独自のAPIにすべてのオプションを公開していないため、Frontier :: Client自体に入り、これを設定しなければなりませんでした。私は新しい(ssl_opts => {verify_hostname => 0})と 'ua-> ssl_opts(verify_hostname => 0)'の両方を無駄にしようとしました。何か悪いことが起こっている。 – Marcus

0

これは古いスレッドですが、解決策を共有したいと思います。 だけ呼び出していない辺境を行う前に、次の行を追加します。LWP 6.15が既に `LWPを持っていたバージョンです::プロトコル:: https`

関連する問題