Openssl SSL_accept () завершается с неизвестным протоколом - PullRequest
0 голосов
/ 22 ноября 2018

Редактировать - я изменил

method = SSLv23_server_method(); to 
method = TLSv1_2_server_method()

;

Теперь SSL_accept () возвращает мне неправильную ошибку номера версии.

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:386:

Когда я перечислял версии SSL и TLS, используемые в моей системе -

openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1.2

Что мне здесь не хватает?


@ jww -> Помечая вас, потому что я заметил, что вы ответили на несколько вопросов, связанных с openssl.Надеюсь, вы не против

У меня проблема с SSL_accept () в коде моего сервера.Я использую openssl 1.0.2g.После долгих исследований я не смог найти истинную причину ошибки.

Вот мой код сервера -

open socket , bind to socket, listen on socket

initialize SSL context and libraries. Load certificate and Private key files
{
    SSL_load_error_strings();
    ERR_load_BIO_strings();
    SSL_library_init();
    OpenSSL_add_all_algorithms();
    const SSL_METHOD *method;
    method = SSLv23_server_method();
    ctx = SSL_CTX_new(method);
    if (SSL_CTX_use_certificate_file(ctx, ccrt, SSL_FILETYPE_PEM) <= 0) {
        ERR_print_errors_fp(stdout);
    }
    if (SSL_CTX_use_PrivateKey_file(ctx, ckey, SSL_FILETYPE_PEM) <= 0 ) {
         ERR_print_errors_fp(stdout);

}

pselect() waits on any incoming connections or any reads on existing connections

if new connection - accept() the connection and add to the pselect FD_SET and return

if existing connection, there is something to read so do the following {
    SSL *ssl;
    if ( !ctx )
    {
       return 0;
    }
    ssl = SSL_new(ctx);
    SSL_set_fd(ssl, soc);
    int ret = SSL_accept(ssl); --> FAILS
    if (ret <= 0) {
        ERR_print_errors_fp(stdout);
     return 0}
 }

Когда распечатывается очередь ошибок, она показывает -

error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:640:

Это несовпадение версий (Openssl 1.0.2g)?

...