2013-11-11 3 views
1

Я знаю, что есть заграждение вопросов (и ответов), но я не мог найти тот, который переехал меня ...OpenSSL «Нет Общий шифр»

Я пытаюсь создать клиентское приложение SSL/сервера и получение:

SSL_accept() returned -1

Error in SSL_accept(): 1

Error: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher

Я действительно не понимаю, что я сделал не так :(

Оба вызова до вызова OpenSSL

SSL_load_error_strings();

SSL_library_init();

ERR_load_BIO_strings();

OpenSSL_add_all_algorithms();

сервера (пропущено сделать короче):

<Created socket and set it to listen to port 8888> 

<Bind and make it listen> 

while (1) 
{ 
    client = accept(server, (sockaddr*) &clientsockaddrin, &len); 

    SSL_CTX *ctx = SSL_CTX_new(SSLv3_server_method()); 

    BIO* bio = BIO_new_file("dh1024.pem", "r"); 

    DH* ret = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); 

    BIO_free(bio); 

    SSL_CTX_set_tmp_dh(ctx, ret); 

    RSA* rsa = RSA_generate_key(1024, RSA_F4, NULL, NULL); 

    SSL_CTX_set_tmp_rsa(ctx, rsa); 

    SSL_CTX_set_cipher_list(ctx, "ALL"); 

    SSL* ssl = SSL_new(ctx); 

    BIO* sslclient = BIO_new_socket(client, BIO_NOCLOSE); 

    SSL_set_bio(ssl, sslclient, sslclient); 

    int r = SSL_accept(ssl); 

    if (r != 1) 
    { 
     printf("SSL_accept() returned %d\n", r); 
     printf("Error in SSL_accept(): %d\n", SSL_get_error(ssl, r)); 
     char error[65535]; 
     ERR_error_string_n(ERR_get_error(), error, 65535); 
     printf("Error: %s\n\n", error); 
     ERR_print_errors(sslclient); 
     int err = WSAGetLastError(); 
     printf("WSA: %d\n", err); 
     // We failed to accept this client connection. 
     // Ideally here you'll drop the connection and continue on. 
     break; 
    } 
} 

Клиент:

SSLSocket *sslSocket = NULL; 
SSL_CTX *ctx = NULL; 

ctx = SSL_CTX_new(SSLv3_client_method()); 

adaptor->SetCipherList(ctx, std::string("ALL")); 

sslSocket = static_cast<SSLSocket *>(adaptor->Connect(ctx, "localhost", 8888)); 

if (sslSocket == NULL) 
{ 
    std::cout << "Unable to connect to service... aborting!" << std::endl; 
    return; 
} 

Я проводил дни вытягивать (что осталось от моих волос), так что любая помощь будет с благодарностью принято !!

+0

Не порты ошибочны? 8888 на сервере против 8096 на клиенте. Или вы просто разместили разные версии? –

+0

Извините, только незначительные изменения в коде, чтобы привести его в порядок, извините за путаницу, я исправлю это. –

ответ

0

Извините, что опубликуйте это как «ответ», поскольку это более подробная информация о вашей охоте за ответом. Замечу, что RFC 4492 требует список совместимых кривых, который является подмножеством множества, поддерживаемого эллиптическими кривыми OpenSSL, поэтому включение кривых, не совместимых с TLSv1.2, может быть частью проблемы, но из того, что я видел, быть. (Извините за мозговой штурм).

Мне интересно, смогли ли вы преодолеть эту проблему, и если да, то как? Надеюсь, вы сделали ради вас и ради меня.

+0

В конце концов я решил это, я не смог правильно настроить шифры, и когда я запускал отладку OpenSSL, я заметил, что он не смог поговорить. Что касается RFC 4492, я не прочитал его, и мои знания OpenSSL примитивны к точке незнания того, что вы не знаете, что такое эллиптическая кривая. –

+0

HI paul. Можете ли вы поделиться решением этой проблемы? Что вы делали для устранения этой ошибки? – kunal

Смежные вопросы