Openssl SSL_accept()因未知协议而失败

时间:2018-11-22 05:22:14

标签: c++ encryption openssl tls1.2

编辑- 我改变了

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)吗?

0 个答案:

没有答案