2016-06-20 15 views
1

私は基本的に検証を無効にするか、あなたの証明書を修正するという認証エラーで無限の投稿を読んでいます。しかし、私たちのプロジェクトでは本当に証明書を使うべきですが、それを働かせることはできません。 SAと2人のプログラマーは、私たちが考えることができるすべてを試してきましたが、何も動いていません。だから私たちは何をしているのか分かりません。Linux上で自己署名証明書の検証に失敗しました。012

まず、これは簡単な接続で得られたエラーで、perlプログラムを取得します。 WEBHOSTNAMEは実際のWebホスト名を置き換えます。

perl -MIO::Socket::SSL=debug30 testerTut2.pl 
DEBUG: .../IO/Socket/SSL.pm:1784: new ctx 46260896 
DEBUG: .../IO/Socket/SSL.pm:446: socket not yet connected 
DEBUG: .../IO/Socket/SSL.pm:448: socket connected 
DEBUG: .../IO/Socket/SSL.pm:466: ssl handshake not started 
DEBUG: .../IO/Socket/SSL.pm:501: using SNI with hostname WEBHOSTNAME 
DEBUG: .../IO/Socket/SSL.pm:524: set socket to non-blocking to enforce timeout=10 
DEBUG: .../IO/Socket/SSL.pm:537: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:547: ssl handshake in progress 
DEBUG: .../IO/Socket/SSL.pm:557: waiting for fd to become ready: SSL wants a read first 
DEBUG: .../IO/Socket/SSL.pm:577: socket ready, retrying connect 
DEBUG: .../IO/Socket/SSL.pm:1772: ok=0 cert=46303216 
DEBUG: .../IO/Socket/SSL.pm:537: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:1408: SSL connect attempt failed with unknown error 

DEBUG: .../IO/Socket/SSL.pm:543: fatal SSL error: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
DEBUG: .../IO/Socket/SSL.pm:1821: free ctx 46260896 open=46260896 
DEBUG: .../IO/Socket/SSL.pm:1826: free ctx 46260896 callback 
DEBUG: .../IO/Socket/SSL.pm:1829: OK free ctx 46260896 
500 Can't connect to WEBHOSTNAME:443 at testerTut2.pl line 34. 

これはperlのプログラムです:

#!/bin/perl 
require LWP::UserAgent; 
use LWP::Protocol::https; 

#note USERNAME is where the real account name goes 
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1, SSL_ca_file => '/home/USERNAME/ca-bundle.crt'}); 
$ua->timeout(10); 
$ua->env_proxy; 

#note hostname is where the real web host name goes 
my $response = $ua->get('https://hostname/tut/ops/data/newtut.dat'); 
if ($response->is_success) 
{ 
    print $response->content; 
    print $response->decoded_content; # or whatever 
} 
else 
{ 
    die $response->status_line; 
} 

SAは、Webサーバー上の署名証明書を作っています。再びwebhostnameは実際のWebホスト名に置き換えられます。

openssl s_client -connect lomweb01:443 -showcerts 
WARNING: can't open config file: /usr/local/ssl/openssl.cnf 
CONNECTED(00000003) 
depth=0 C = US, ST = MD, L = Greenbelt, O = NASA, OU = MMS, CN = webhostname.edtfmmslinux.ecs.nasa.gov 
verify error:num=18:self signed certificate 
verify return:1 
depth=0 C = US, ST = MD, L = Greenbelt, O = NASA, OU = MMS, CN = webhostname.edtfmmslinux.ecs.nasa.gov 
verify return:1 
--- 
Certificate chain 
0 s:/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov 
    i:/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov 
-----BEGIN CERTIFICATE----- 
MIIDbDCCAlQC etc etc k7Pr1nRQG 
3/NKQVqaSITGHGZBtlKjpw== 
-----END CERTIFICATE----- 
--- 
Server certificate 
subject=/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov 
issuer=/C=US/ST=MD/L=Greenbelt/O=NASA/OU=MMS/CN=webhostname .edtfmmslinux.ecs.nasa.gov 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 1639 bytes and written 711 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1.2 
    Cipher : ECDHE-RSA-AES256-GCM-SHA384 
    Session-ID: 921941EFFB19FA3158C751D155C012D5A418425BFAE94FEA1D99231A3CEF5D3C 
    Session-ID-ctx: 
    Master-Key: 13BFF7BE2B8ED18056BA54415026FC1ED133F47BADE2683A5EB3A2FED15F34ABD3F837985A498404A948B7F5B1F4774B 
    Key-Arg : None 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    TLS session ticket lifetime hint: 300 (seconds) 
    TLS session ticket: 
    0000 - d6 99 6e 28 8c 86 5e 9b-e2 e8 etc. etc. 
    00b0 - 20 96 ea 05 9 

    Start Time: 1466432096 
    Timeout : 300 (sec) 
    Verify return code: 18 (self signed certificate) 
--- 

クライアントボックスで、ローカルのca-bundle.crtファイルをUSERNAMEホームディレクトリに作成しました。私は "cp /etc/pki/tls/certs/WEBSERVER.crt〜/ ca-bundle.crt"とし、perlスクリプトはSSL_ca_fileの値をそのパスに設定しました。

Apache設定ファイルが更新され、/etc/pki/tls/cert/WEBSERVER.crtファイルが使用され、再起動されました。

それでも動作しません。異なるWebホスト名パターンを試しましたが、変更はありません。なぜ証明書が機能していないのかわかりませんが、指示に正しく従っていると思います。私たちが証明書を受け入れた後、Firefoxはうれしいですが、perlはそうではありません。では、何が間違っているのですか?

+0

使用しているLWPのバージョンは?バージョン6では、SSLサポートが大幅に変更されました。 – cjm

+0

perl -MLWP :: UserAgent -e 'print "$ LWP :: UserAgent :: VERSION \ n";' 6.05 – user3416126

+0

LWPがなぜあなたに言わないのか分かりませんが、証明書がCAとして受け入れられていないようです。証明書を生成するときに対応するCAフラグを設定するために "-extensions v3_ca"を追加しようとしましたか? – mbethke

答えて

1

perlスクリプトをストラミングした後、sybaseと判明しました。 sybaseクライアントには、互換性のないバージョンのopensslが付属しています。 Net :: SSLeayはopensslへのインタフェースです。 IO :: Socket :: SSLはNet :: SSLLeayを使用し、LWP :: UserAgentはIO :: Socket :: SSLを使用します。 perlスクリプトを実行すると、PATHのsybaseディレクトリが前面に表示されます。 sybaseには独自のCAファイルがあり、CA RHEL 7との互換性や期限が切れていないため、sybase CAが最初にca.pemに到達するまでにすべてを混乱させます。この問題を解決するために、PATHからsybaseディレクトリを取り除くためにperlスクリプトを変更し、SSL_ca_fileオプションがうまくいきました。

my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1, SSL_ca_file => '/home/<server account>/certs/ca.pem'}); 

これは、我々はハードだった配列の境界オーバーフローを引き起こし、他の一つは、標準の1024対4096にファイル記述子の制限を増やすのsybaseたRHEL 7に行くので、持っていた二sybaseの副作用であります1024にコード化されています。

関連する問題