Мне нужно написать программку, которая слушает SSL socket и отвечает на запросы. Я ее пишу на перле. Использую модуль IO::Socket::SSL. Чтобы с этим работать надо создать ключ и сертификат в openssl. Private or public - не знаю, тк с SSL никогда не сталкивался. Объясните, пожалуйста, какие нужны ключи. А заодно посмотрите, что я неправильно написал в этом сокет-сервере.#!/usr/local/bin/perl -wT
use IO::Socket::SSL;
use strict;
$IO::Socket::SSL::DEBUG = 1;
my $sock; # new object handler
my $s; # accept() handler
my $openssl_path = '/usr/local/openssl';
my $cert_path = $openssl_path . '/certs';
my $key_file = $cert_path . '/server-key.pem';
my $cert_file = $cert_path . '/server-cert.csr';
# Create new object
$sock = IO::Socket::SSL->new(
Listen => 5,
LocalAddr => 'localhost',
LocalPort => 443,
Proto => 'tcp',
Reuse => 1,
SSL_verify_mode => 0x01,
SSL_use_cert => 1,
SSL_server => 1,
SSL_cipher_list => 'ALL',
SSL_key_file => $key_file,
SSL_cert_file => $cert_file,
) or die "Can\'t create socket " . &IO::Socket::SSL::errstr . " [!$]";while (1) {
print "Waiting for new connection............ ";while(($s = $sock->accept())) {
my ($subject_name, $issuer_name);if( ! $s ) {
print "[ FAIL ]\n\t\tError: ", $sock->errstr, "\n";
next; # wait for new connection
}print "[ OK ]\n";
if( ref($sock) eq "IO::Socket::SSL") {
$subject_name = $s->peer_certificate("subject");
$issuer_name = $s->peer_certificate("issuer");
}
print "subject_name: $subject_name,\nissuer_name=$issuer_name\n";close ($s);
}
}
Сделал следующие ключи:
dd bs=256 count=3 if=/dev/urandom of=random_seed
openssl genrsa -out server-key.pem -rand random_seed 4096
openssl rsa -pubout -in server-key.pem -out client-key.pem
# Сертификат
openssl req -new -key server-key.pem -out server-cert.csr
# ca file
openssl req -new -x509 -key server-key.pem -out ca-cert.pem -days 3650
Добавил в скрипт:
my $ca_path = $cert_path;
my $ca_file = $ca_path . '/ca-cert.pem';$sock = IO::Socket::SSL->new(
Listen => 5,
LocalAddr => 'localhost',
LocalPort => 443,
Proto => 'tcp',
Reuse => 1,
SSL_verify_mode => 0x01,
SSL_use_cert => 1,
SSL_server => 1,
SSL_cipher_list => 'ALL',
SSL_key_file => $key_file,
SSL_cert_file => $cert_file,
SSL_ca_path => $ca_path,
SSL_ca_file => $ca_file
) or die "Can\'t create socket " . &IO::Socket::SSL::errstr . " [!$]";Все равно получаю:
Failed to open Certificate error:0906d06c:PEM_read_bio: no start line
SSL error: 3793: 1 - error:140dc009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM libГде здесь ошибка кроется?