perl IO :: Socket :: SSL Попытка подключения SSL не удалась - PullRequest
1 голос
/ 27 мая 2020

при запуске io :: socket :: ssl tls conncetion

мой пример работает с google и facebook, но не работает с sip tls server

то есть sip tls server

У меня проблемы с пропуском сертификата

#/usr/bin/perl
use IO::Socket::SSL;

start_connection("2.50.44.55:5061");

sub start_connection{
    my @parms = @_;
    my $host  = $parms[0];
 
    my $sock = IO::Socket::SSL->new(
        PeerAddr => $host,
        SSL_startHandshake => 0,
    ) or die $!;
    $sock->connect_SSL() or die $SSL_ERROR;
    print "Good Connection"
}

на i setart conncet У меня эта ошибка

Ошибка попытки подключения SSL : 14090086: Подпрограммы SSL: ssl3_get_server_certificate: не удалось проверить сертификат в строке 14 dd.pl

1 Ответ

2 голосов
/ 27 мая 2020

Здесь вы используете самоподписанный сертификат. IO :: Socket :: SSL по умолчанию проверяет, можно ли доверять сертификату, а самозаверяющий сертификат нельзя доверять, если это явно не известно клиенту. Хотя вы можете просто отключить проверку сертификата, это в основном отключит любую значимую безопасность, поскольку какой-то человек в середине злоумышленника может выдать себя за настоящий сервер, а клиент этого не заметит.

* 1002 общедоступный центр сертификации, например Let's Encrypt. Если вы настаиваете на использовании самозаверяющего сертификата, вы можете специально доверять этому сертификату, используя опцию SSL_fingerprint.

Чтобы получить необходимый отпечаток сертификата:

 $ echo | openssl s_client -connect 2.50.44.55:5061 |\
    openssl x509 -noout -fingerprint
 ...
 SHA1 Fingerprint=CE:68:62:68:30:EA:F4:64:82:F5:5C:B7:FB:F4:DA:1B:77:88:9F:DD

Затем использовать этот отпечаток с IO :: Socket :: SSL

my $sock = IO::Socket::SSL->new(
    PeerAddr => '2.50.44.55:5061',
    SSL_fingerprint => 'sha1$CE68626830EAF46482F55CB7FBF4DA1B77889FDD'
) or die $SSL_ERROR;
...