[Perl] нужна помощь с https (certificate verify failed)

Discussion in 'PHP' started by M0Dred, 31 Oct 2011.

  1. M0Dred

    M0Dred New Member

    Joined:
    25 Apr 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Всем привет!
    Возникла проблема при написании программы, почему-то не пускает на сервер с сертификатом. (из начально он давался в pfx формате с паролем)

    я вытащил из него CA, cl-cert и privat-key

    Через openssl конектиться отлично.

    Code:
    use LWP::Debug qw(+);
    use LWP::UserAgent;
    
    
    # Директория, где хранятся файлы с сертификатами
    $ENV{HTTPS_CA_DIR} = '/Users/.../crt/';                     
    
    # файл, содержащий сертификат пользователя
    $ENV{HTTPS_CERT_FILE} = $ENV{HTTPS_CA_DIR} . 'new_cert.crt'; 
    
    # файл, содержащий секретный ключ
    $ENV{HTTPS_KEY_FILE} = $ENV{HTTPS_CA_DIR} . 'new_private.key';
    
    # файл, содержащий корневой сертификат
    $ENV{HTTPS_CA_FILE} = $ENV{HTTPS_CA_DIR} . 'new_cacert.pem';
    
    my $ua = new LWP::UserAgent;
    $ua->timeout(15);
    $ua->agent("MSIE 9.0");
    my $req = new HTTP::Request('GET', 'https://REMOTE_HOST');
    my $res = $ua->request($req);
    
    print $res->as_string;
    
    
    выдает ошибку:
    Error GETing https://REMOTE_HOST: Can't connect to REMOTE_HOST:443 (certificate verify failed)

    Используется Perl 5.14.1
    листинг используемых модулей при запуске из modelist:
    Code:
    
    AutoLoader             5.71
    Carp                   1.23
    Compress::Raw::Zlib   2.037
    Compress::Zlib        2.037
    Config                     
    Cwd                    3.36
    DynaLoader             1.13
    Encode                 2.44
    Encode::Alias          2.15
    Encode::Config         2.05
    Encode::Encoding       2.05
    Encode::Locale         1.02
    Errno                  1.13
    Exporter               5.65
    Exporter::Heavy        5.65
    Fcntl                  1.11
    File::Basename         2.82
    File::Glob             1.12
    File::GlobMapper      1.000
    File::Spec             3.33
    File::Spec::Unix       3.33
    HTML::Entities         3.69
    HTML::Form             6.00
    HTML::Parser           3.69
    HTML::PullParser       3.57
    HTML::Tagset           3.20
    HTML::TokeParser       3.69
    HTTP::Config           6.00
    HTTP::Cookies          6.00
    HTTP::Cookies::Netscape   6.00
    HTTP::Date             6.00
    HTTP::Headers          6.00
    HTTP::Headers::Util    6.00
    HTTP::Message          6.02
    HTTP::Request          6.00
    HTTP::Request::Common   6.00
    HTTP::Response         6.01
    HTTP::Status           6.00
    I18N::Langinfo         0.08
    IO                   1.25_04
    IO::Compress::Adapter::Deflate  2.037
    IO::Compress::Base    2.037
    IO::Compress::Base::Common  2.037
    IO::Compress::Gzip    2.037
    IO::Compress::Gzip::Constants  2.037
    IO::Compress::RawDeflate  2.037
    IO::Compress::Zlib::Extra  2.037
    IO::File               1.15
    IO::Handle             1.31
    IO::Seekable            1.1
    IO::Socket             1.32
    IO::Socket::INET       1.31
    IO::Socket::SSL        1.47
    IO::Socket::UNIX       1.23
    IO::Uncompress::Adapter::Inflate  2.037
    IO::Uncompress::Base  2.037
    IO::Uncompress::Gunzip  2.037
    IO::Uncompress::RawInflate  2.037
    LWP                    6.03
    LWP::MemberMixin           
    LWP::Protocol          6.00
    LWP::Protocol::http        
    LWP::Protocol::https   6.02
    LWP::UserAgent         6.03
    List::Util             1.23
    Mozilla::CA          20111025
    Net::HTTP              6.01
    Net::HTTP::Methods     6.00
    Net::HTTPS             6.00
    Net::LibIDN            0.12
    Net::SSLeay            1.42
    Scalar::Util           1.23
    SelectSaver            1.02
    Socket                 1.94
    Storable               2.30
    Symbol                 1.07
    Time::Local          1.2000
    URI                    1.59
    URI::Escape            3.31
    URI::_generic              
    URI::_idna                 
    URI::_punycode         0.04
    URI::_query                
    URI::_server               
    URI::http                  
    URI::https                 
    WWW::Mechanize         1.70
    XSLoader               0.15
    base                   2.16
    bytes                  1.04
    constant               1.21
    feature                1.20
    integer                1.00
    overload               1.13
    utf8                   1.09
    vars                   1.02
    warnings               1.12
    warnings::register     1.02
    
    ума не приложу в чем проблема... на обычные сайты по https заходит!!!
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    А если добавить в начале
    Code:
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
    
    то как отрабатывает?
     
    _________________________
  3. M0Dred

    M0Dred New Member

    Joined:
    25 Apr 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    выдает следующее:
    Code:
    Error GETing https://REMOTE_HOST: Can't connect to REMOTE_HOST:443 at /Users/.../main.pl line 145
    500 Can't connect to REMOTE_HOST:443
    Content-Type: text/plain
    Client-Date: Mon, 31 Oct 2011 17:22:29 GMT
    Client-Warning: Internal response
    
    Can't connect to REMOTE_HOST:443
    
    LWP::Protocol::https::Socket: SSL connect attempt failed because of handshake problemserror:14094413:SSL routines:SSL3_READ_BYTES:sslv3 alert unsupported certificate at /opt/local/lib/perl5/site_perl/5.14.1/LWP/Protocol/http.pm line 51.
     
  4. M0Dred

    M0Dred New Member

    Joined:
    25 Apr 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Up, пока не смог побороть проблему, не откажусь от любой помощи в решении =)
     
  5. M0Dred

    M0Dred New Member

    Joined:
    25 Apr 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    после аптейда через cpan
    Code:
    use LWP::Debug qw(+);
    use IO::Socket::SSL qw(debug3);
    use LWP::UserAgent;
    use HTTP::Cookies;
    
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 1;
    $ENV{PERL_LWP_SSL_CA_FILE} = '/Users/.../certs/my-ca.pem';
    $ENV{HTTPS_CA_DIR} = '/Users/.../certs/';
    $ENV{HTTPS_CERT_FILE} = '/Users/.../certs/client-cert.pem';
    $ENV{HTTPS_KEY_FILE}  = '/Users/.../certs/client-key.pem';
    
    
    my $browser = LWP::UserAgent->new();
    $browser->agent("MSIE 8.0");
    my $req = new HTTP::Request('GET', 'HOST');
    $browser->cookie_jar(HTTP::Cookies->new());
    $browser->show_progress(0);
    
    foreach my $name ($browser->ssl_opts){
        print $name .": ".$browser->ssl_opts($name) . "\n";
    }
    my $response = $browser->request($req);
    выдает следующее
    Code:
    ===
    SSL_ca_path: /Users/.../certs/
    SSL_ca_file: /Users/.../certs/my-ca.pem
    verify_hostname: 1
    ===
    DEBUG: .../IO/Socket/SSL.pm:1545: new ctx 4318236096
    DEBUG: .../IO/Socket/SSL.pm:334: socket not yet connected
    DEBUG: .../IO/Socket/SSL.pm:336: socket connected
    DEBUG: .../IO/Socket/SSL.pm:349: ssl handshake not started
    DEBUG: .../IO/Socket/SSL.pm:1533: ok=1 cert=4318686352
    DEBUG: .../IO/Socket/SSL.pm:1533: ok=1 cert=4318719680
    DEBUG: .../IO/Socket/SSL.pm:1533: ok=1 cert=4318713712
    DEBUG: .../IO/Socket/SSL.pm:1148: scheme=www cert=4318713712
    DEBUG: .../IO/Socket/SSL.pm:1155: identity=host1 cn=host1 alt=2 host1 2 host1
    DEBUG: .../IO/Socket/SSL.pm:392: Net::SSLeay::connect -> 0
    DEBUG: .../IO/Socket/SSL.pm:440: connection failed - connect returned 0
    DEBUG: .../IO/Socket/SSL.pm:1276: SSL connect attempt failed because of handshake problemserror:14094413:SSL routines:SSL3_READ_BYTES:sslv3 alert unsupported certificate
    
    DEBUG: .../IO/Socket/SSL.pm:1276: IO::Socket::INET configuration failederror:00000000:lib(0):func(0):reason(0)
    
    DEBUG: .../IO/Socket/SSL.pm:1582: free ctx 4318236096 open=4318236096
    DEBUG: .../IO/Socket/SSL.pm:1587: free ctx 4318236096 callback
    DEBUG: .../IO/Socket/SSL.pm:1590: OK free ctx 4318236096
    Такое ощущение что просто не берет сертификат и ключ !?