Начинаем использовать OpenSSL - PullRequest
2 голосов
/ 09 июля 2010

Я хочу использовать SSL в моей кроссплатформенной программе.Я решил использовать OpenSSL.

У меня установлен OpenSSL, и сейчас я просматриваю код и документацию, пытаясь выяснить, как использовать библиотеку.

Есть ли у вас какие-либо ресурсы или простые программы или учебные пособия, которые помогут мне интегрировать OpenSSL с моей программой?

Ответы [ 3 ]

6 голосов
/ 14 июля 2010

Очень грубый ориентир:

  • Создать новый SSL_CTX с SSL_CTX_new();
  • (только для сервера) Загрузить сертификат с помощью SSL_CTX_use_certificate_file();
  • (только для сервера) Загрузить секретный ключ с помощью SSL_CTX_use_PrivateKey_file();
  • установить сетевое соединение;
  • Создать новый SSL с SSL_new();
  • Установите дескриптор файла SSL на дескриптор вашего сетевого подключения с помощью SSL_set_fd();
  • (только клиент) Звоните SSL_connect();
  • (только сервер) Вызов SSL_accept().

После этого используйте SSL_read() и SSL_write() для чтения и записи из соединения и завершите с SSL_shutdown(). SSL_CTX можно повторно использовать для создания SSL объектов для множества одновременных сеансов.

2 голосов
/ 12 июля 2010

Вы можете найти некоторые полезные команды OpenSSL на этой странице:

http://www.networking4all.com/en/support/ssl+certificates/manuals/openssl/openssl+commands/

0 голосов
/ 20 сентября 2012

из "очень грубого руководства", которое вы упомянули, мне удалось добраться до успешного SSL-рукопожатия между веб-браузером mozilla и моим сервером (закодировано в c). Но после SSL_accept, когда я пытаюсь использовать SSL_read для получения заголовка браузераподробности, я получаю ненужные значения и прочитанные байты показаны равными нулю.ниже приведен код, вызов SSL_accept успешен, но SSL_read не является ..

    if(SSL_set_fd(ssl, client_s)<0)
        printf("\n error in assigning socket to SSL:");
    else
        printf("\n The socket has been assigned to SSL Structure");

    /* Perform SSL Handshake on the SSL server */
    err = SSL_accept(ssl);
    printf("\n Value of err is %d",err);
    RETURN_ERR(err,"SSL_accept");
    if(err==1)
        printf("\n The ssl connection/Handshake has been successful");
    else
        printf("\n The ssl connection was not successful");

    /* Informational output (optional) */
        printf("\n SSL connection using %s\n", SSL_get_cipher (ssl));


    /*receive the data from the client*/
    //err = SSL_accept(ssl);
    while(i<5)
    {
        err = SSL_read(ssl, in_buf, strlen(in_buf));
        printf("\n value of err is %d",err);
        RETURN_ERR(err,"SSL_read");

        printf("\n The details from the server is\n: %s,\n Bytes Read : %d",in_buf,err);
        if(err<0)
        printf("\n Not Successfully received clients information");
        i++;
     }
     err = SSL_shutdown(ssl);
    /* Terminate communication on a socket */
    err = close(server_s);
    /* Free the SSL structure */
    SSL_free(ssl);
    /* Free the SSL_CTX structure */
    SSL_CTX_free(ctx);

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