Какой-то источник OpenSSL, который таинственным образом не работает - PullRequest
1 голос
/ 02 апреля 2012

Это заставляет меня ползти по стенам. Я не могу выяснить, почему этот источник не открывает сокет. Это достаточно просто, но не работает. Может кто-нибудь, пожалуйста, помогите мне с этим? Спасибо за внимание! Кстати, я не вижу текста на экране, и он блокируется с помощью функции BIO_do_accept ().

#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/ssl.h>
#include <openssl/x509v3.h>

#include <iostream>
#include <process.h>
using namespace std;

int main()  {

    SSL_load_error_strings();
    SSL_library_init();
    OpenSSL_add_all_algorithms();

    BIO *abio, *cbio, *cbio2;
    ERR_load_crypto_strings();
    abio = BIO_new_accept("4444");

    /* First call to BIO_accept() sets up accept BIO */
    if(BIO_do_accept(abio) <= 0) {
        fprintf(stderr, "Error setting up accept\n");
        ERR_print_errors_fp(stderr);
        exit(0);
    }

    /* Wait for incoming connection */
    if(BIO_do_accept(abio) <= 0) {
        fprintf(stderr, "Error accepting connection\n");
        ERR_print_errors_fp(stderr);
        exit(0);
    }

    fprintf(stderr, "Connection 1 established\n");
    /* Retrieve BIO for connection */
    cbio = BIO_pop(abio);
    BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\n");
    fprintf(stderr, "Sent out data on connection 1\n");
}

1 Ответ

1 голос
/ 03 апреля 2012

Я только что проверил это (на cygwin, с установленными gcc 4.5.3 и openssl-devel 1.0.1)

Ваш код, опубликованный в чате , скомпилированный с

g++ -std=c++0x ./test.cpp -lssl -lcrypto  -o test

Результирующий код , очевидно, не работает, поскольку код ссылается на server.crt и server.key:

openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Создает собственный сертификатс незащищенным ключом (вы можете использовать genrsa -des3 для добавления ключевой фразы к ключу).

Теперь я могу проверить его правильно:

test& # in the background
openssl s_client -connect localhost:12120

Это приводит вас кtelnet клиент с поддержкой SSL, и он работал хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...