Редактировать - я изменил
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)?