2016-01-29 4 views
0

Я подключаюсь к серверу CAS. Но мой сертификат сервера CAS истек и в связи с этим становится ниже ошибки:Ошибка сертификата в Perl

error SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed unable to connect https://<domain Name>:443/ 

Чтобы избежать этой ошибки мало предложение как verify_hostname & verify_ssl на «0». Но это не решение проблемы. Может ли кто-нибудь помочь?

версия Perl: 5,22
LWP: 6.0.16

ответ

2

To avoid this error few suggestion is like verify_hostname & verify_ssl to "0"

Если бы следовать этим советам, то вы должны спросить себя, почему вы используете протокол HTTPS на всех. Поскольку игнорирование ошибок сертификатов означает, что человек в средних атаках возможен, и, следовательно, защита TLS должна предлагать просто исчезнуть.

Чтобы подключиться к серверу, на котором сертификат не может быть правильно проверен обычным способом, вы должны использовать другой тип проверки вместо проверки вообще. Поддержка https в текущих версиях LWP реализуется с использованием IO::Socket::SSL. Этот модуль предлагает простой механизм для решения таких проблем путем сравнения отпечатка сертификата с ожидаемым отпечатком.

Сначала вам нужно получить текущий отпечаток сертификата. Это может быть сделано с некоторыми openssl командами или, если вы уверены, что нет в настоящее время ни один человек в середине атаки вы можете просто получить доступ к серверу:

use strict; 
use warnings; 
use IO::Socket::SSL 1.980; 

my $dst = 'bad-cert.example.com'; 
my $cl = IO::Socket::SSL->new(
    PeerAddr => $dst, 
    PeerPort => 443, 
    # certificate cannot be validated the normal way, so we need to 
    # disable validation this one time in the hope that there is 
    # currently no man in the middle attack 
    SSL_verify_mode => 0, 
) or die "connect failed"; 
my $fp = $cl->get_fingerprint; 
print "fingerprint: $fp\n"; 

Это даст вам отпечаток пальца с хэш-алгоритма, то есть что-то вроде sha256$55a5dfaaf.... Этот отпечаток пальца может быть использован для проверки сертификата в будущих вызовах:

use strict; 
use warnings; 
use IO::Socket::SSL 1.980; 
use LWP::UserAgent; 

my $dst = ....; # from above example 
my $fp = ....; # from above example 
my $ua = LWP::UserAgent->new(ssl_opts => { SSL_fingerprint => $fp }); 
my $resp = $ua->get("https://$dst"); 
print $resp->content; 

Кроме того, пожалуйста, не то, что есть причина сертификатов истекает. По истечении срока действия больше не будет отслеживаться. Это означает, что вам действительно нужно знать, что этот сертификат определенно не отменен, потому что ни один ЦС не скажет вам.

+0

По-прежнему означает, что ваш трафик зашифрован в полете, поэтому значительно сложнее проверить. – Sobrique

+0

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

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