2011-10-05 2 views
3

Вот программа, которая делает запрос HTTPS, с каким-то кодом в начале, что я собираюсь объяснить ниже:Windows/Perl/Net :: SSLeay/OpenSSL: в каких местоположениях загружены сертификаты CA?

use 5.012; 
use LWP::UserAgent; 
use HTTP::Request::Common; 
use Net::SSLeay; 

BEGIN { 
    return unless $^O eq 'MSWin32'; # only needed on Windows 
    print STDERR "attempting to set HTTPS_CA_FILE to PEM file path\n"; 
    require Mozilla::CA; # load module to determine PEM file path 
    my $pemfile = do { 
     my $path = $INC{ 'Mozilla/CA.pm' }; 
     $path =~ s#\.pm$#/cacert.pem#; 
     $path; 
    }; 
    if (-f $pemfile) { 
     $ENV{HTTPS_CA_FILE} = $pemfile; 
     print STDERR "HTTPS_CA_FILE set to $pemfile\n"; 
    } 
    else { 
     warn "PEM file $pemfile missing"; 
    } 
} # ========================================================================== 

$Net::SSLeay::trace = 2; 

my $ua = LWP::UserAgent->new; 
my $req = GET 'https://client.billsafe.de/'; 
my $rsp = $ua->request($req); 

say $rsp->is_success ? 'success' : 'failure'; 
say $rsp->status_line; 
say '================='; 
say substr $rsp->decoded_content, 0, 200; 
say '================='; 

# possibly relevant module versions 
for (qw/Net::SSLeay Crypt::SSLeay LWP::Protocol::https Mozilla::CA/) { 
    no strict 'refs'; 
    say $_, "\t", ${"${_}::VERSION"} 
} 

код в начале устанавливает переменное окружение HTTPS_CA_FILE к значению файла PEM cacert.pem от Mozilla::CA, который загружается по умолчанию (я проверил с помощью procmon.exe, файл полностью прочитан по умолчанию).

Причина, по которой это явно бессмысленная настройка, заключается в том, что у нас есть несколько машин Windows (Windows Server 2008), где сбой SSL-установки завершается с ошибкой сертификата ., когда переменная окружения не установлена. Для нас загадка, почему это так. И он отлично работает на других машинах Windows с идентичными версиями для Net::SSLeay, LWP::Protocol::https и Mozilla::CA.

Наши версии модуля являются:

  • Net :: SSLeay 1,36
  • Crypt :: SSLeay -/-
  • LWP :: Протокол :: HTTPS 6,02
  • Mozilla :: CA 20110409

Теперь вопрос: есть ли другие места, кроме cacert.pem, из этого созвездия загружаются корневые сертификаты (Windows, Perl , Net :: SSLeay)? Если так, то кто они? Где я могу это прочитать?

Update

Документы OpenSSL не говоря уже о каком-либо хранилище сертификатов, кроме простого файла и простой каталога:

средства Windows C Функции API, используемые для открытия хранилища сертификатов системы, - это foll из-за:

Я проверил ГОЛОВУ OpenSSL из CVS. Функция CertOpenStore действительно используется в engines/e_capi.c. Я еще не исследовал, чтобы узнать, что используется для доступа к хранилищу в версиях OpenSSL на соответствующих серверах.

Если вы выполните поиск в Интернете, вы увидите, что несколько человек задаются вопросом, может ли OpenSSL получить доступ к хранилищу сертификатов Windows напрямую или proposed to patch OpenSSL accordingly. Там также есть recent issue on the TortoiseSVN list (Windows Certificate Store/OpenSSL CAPI). Необходимо провести еще несколько исследований, чтобы выяснить, что здесь происходит.

ответ

0

С LWP 6.00 Вы можете передать ssl_opts hashref новым указанием файлов сертификатов среди других вариантов:

my $ua = LWP::UserAgent->new(
    ssl_opts => { 
     verify_hostname => 1, 
     SSL_cert_file => $ssl_cert_file, 
     SSL_key_file => $ssl_key_file, 
    }, 
); 
+0

Опции для сертификатов ЦС называются '' SSL_ca_file' и SSL_ca_path', вы получили, что неправильно в вашем примере кода. Но я не использовал эти параметры в своем примере сценария, и это не отвечает на мой вопрос. Спасибо, в любом случае. – Lumi

+0

К сожалению, для аутентификации сертификатов. Я хотел сказать, что вы можете использовать параметры для их настройки вместо переменных окружения, которые являются глобальными. –

+0

Взгляните на https://metacpan.org/source/GAAS/LWP-Protocol-https-6.02/lib/LWP/Protocol/https.pm. Он использует сконфигурированный файл CA или путь, если они установлены и возвращаются в Mozilla :: CA. В вашем случае я предлагаю вам проверить, установлены ли у неудачных серверов правильное время, установленное с помощью ntp. –

Смежные вопросы