Здесь вы используете самоподписанный сертификат. 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;