私たちの会社では現在、SSL を介して HTTPS で外部ベンダーに接続するスクリプトを使用しています。スクリプトはサーバー認証のみを実行します。これです:
use HTML::Parser;
use HTTP::Request::Common;
use LWP::UserAgent;
use XML::Simple;
local $ENV{HTTPS_CERT_FILE} = '../cert/abc.vendor.crt';
local $ENV{HTTPS_PROXY} = 'https://proxy.com:8080';
local $ENV{HTTPS_DEBUG} = 0;
my $vendor_server = 'https:abc.vendor.site.com';
my $xml = "XML code here";
my $request = (POST $vendor_server, Content_Type => 'text/xml; charset=utf-8', Content => $xml);
my $ua = LWP::UserAgent->new();
my $response = $ua->request($request);
if ( $response->is_success() ) {
return $response;
}
else {
return "Error message";
}
これは必要に応じて機能していますが、会社のコンプライアンスとセキュリティのために、これを自己署名証明書による「相互認証」にする必要があります。HTTPS_DEBUG を 1に変更し、その後に次の 2 行を追加してみました。「myserver.crt」は、CSR を作成した後の内部で自己署名された証明書です (これらの詳細が正しいことを願っています。明らかなように、私は SSL に精通していません)。
local $ENV{HTTPS_CA_DIR} = '../cert';
local $ENV{HTTPS_CA_FILE} = '../cert/myserver.crt';
しかし、スクリプトを実行すると次のエラーが発生します。
Connecting to abc over SSL and sending POST
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL3 alert write:fatal:unknown CA
SSL_connect:error in SSLv3 read server certificate B
SSL_connect:error in SSLv3 read server certificate B
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
SSL3 alert write:fatal:bad certificate
SSL_connect:error in SSLv3 read server certificate B
SSL_connect:before/connect initialization
SSL_connect:SSLv2 write client hello A
SSL_connect:failed in SSLv2 read server hello A
Ticket FAILED
$VAR1 = '500 SSL negotiation failed: ';
私は何を間違っていますか?
助けてくれてありがとう!