URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5726
[ Назад ]

Исходное сообщение
"Помогите! Какие (и как) нужно создать ключи/сертификаты для IO::Socke "

Отправлено leog , 20-Сен-06 12:27 
Мне нужно написать программку, которая слушает 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);
    }
}


Содержание

Сообщения в этом обсуждении
"Помогите! Какие (и как) нужно создать ключи/сертификаты для ..."
Отправлено leog , 20-Сен-06 16:32 
Сделал следующие ключи:
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

Где здесь ошибка кроется?