Проблема с получением описания ошибки после того, как SSL_CTX_new вернул NULL - PullRequest
6 голосов
/ 25 мая 2009

Я очень новичок в SSL, на самом деле я бы сказал, что ничего об этом не знаю.

Я использую метод "SSL_CTX_new" для создания объекта SSL_CTX. Метод возвращает значение null. В документации сказано, что я могу проверить стек ошибок, чтобы выяснить причину этого.

Итак, у меня есть функция "int SSL_get_error (SSL * s, int ret_code)", которую (как я понимаю) я должен использовать, чтобы получить сообщение об ошибке. документация метода ничего не говорит о первом параметре функции. Это только говорит о том, что второй ("ret") параметр должен быть равен коду возврата из сбойной операции, который может быть любым из следующих:

SSL_connect (), SSL_accept (), SSL_do_handshake (), SSL_read (), SSL_peek () или SSL_write ()

Так что теперь у меня две проблемы. Во-первых, я не использовал ни одну из этих функций, а использовал SSL_CTX_new, который не возвращает никакого кода возврата (он возвращает указатель на объект SSX_CTX), так что я не знаю, что поставить как «ret» параметр. Вторая проблема заключается в том, что я не знаю, что означает первый параметр и что я должен там указать, потому что документ ничего не говорит об этом.

Ответы [ 2 ]

8 голосов
/ 07 ноября 2012

Согласно http://www.mail-archive.com/openssl-users@openssl.org/msg51543.html, вы можете пропустить звонок на SSL_library_init(). Добавление этого до вызова SSL_CTX_NEW (..) решило проблему значения NULL для меня.

6 голосов
/ 25 мая 2009

Для создания объекта SSL необходим действительный контекст.

Поскольку вы не можете создать контекст, вы не можете использовать SSL_get_error.

Попробуйте использовать ERR_print_errors, чтобы увидеть, что пошло не так

#include "openssl/err.h"
...

SSL_CTX * ctx = SSL_CTX_new(....);
if(!ctx) {
    ERR_print_errors_fp(stderr);
    //throw or return an error 
}

Я только что прочитал документацию по SSL. Если вам нужно программно получить код ошибки / строку ошибки, вам следует использовать функции ERR_get_error и ERR_error_string.

Посмотрите здесь и здесь

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