Ошибка SSL_CTX_use_PrivateKey_file в Linux - PullRequest
0 голосов
/ 08 января 2010

Я пытаюсь использовать функцию SSL_CTX_use_PrivateKey_file в OpenSSL под Linux, но она возвращает false. Окружающий код был портирован из Windows, где все работает нормально. Есть ли что-то, что должно быть сделано по-разному в зависимости от системы?

Я сам скомпилировал библиотеку OpenSSL (настройки по умолчанию и т. Д.) В Ubuntu и использую предварительно скомпилированные двоичные файлы для Windows (по ссылке с сайта OpenSSL).

Сертификаты в файлах .pem, а также ключ. Также установлен пароль.

Вот что в основном сделано;

SSL_CTX_set_default_passwd_cb( pContext, passwdCallback );
SSL_CTX_set_default_passwd_cb_userdata( pContext, (void*)this );
SSL_CTX_use_certificate_file( pContext, strCertificateFile, SSL_FILETYPE_PEM );
SSL_CTX_use_Privatekey_file( pContext, strPrivateKeyFile, SSL_FILETYPE_PEM ); // fail in Linux but work fine in Windows

У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 11 января 2010

Для простоты я удалил весь код из моего обратного вызова пароля, и у меня было простое pBuf = "mypass"; return 6; Это было бы минимальным значением функции обратного вызова. Это работало нормально.

Так что же отличало код Windows от кода Linux? Ну, единственное отличие в коде - это вызовы strcpy_s и strcpy соответственно. Чем они отличаются (кроме дополнительных параметров валидации)?

Чтобы проверить успешность операции копирования строки, код просто проверил на равенство 0. Однако две функции копирования имеют разные спецификации для своих возвращаемых значений. Microsoft изменила поведение возврата «strcpy» с «0 означает ошибку» на «0 означает успех». Вздох ...

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