2014-12-12 2 views
1

Я работаю над файловым сервером win32, который был закодирован с использованием Visual Studio 6.0. Он настроил SSL и работал в 2000 году, но с тех пор не использовался.Сервер не работает при инициализации Openssl

Теперь мы хотим использовать SSL (Opensll), поэтому я обновил библиотеки и т. Д. И имею сервер, работающий с SSLv3 и TLS, когда сервер запускается как консольное приложение.

Как только я запускаю сервер в качестве службы Windows, процедура инициализации ssl вылетает без сообщений об ошибках. Вот код, который вызывает все горе.

int SwiftSSL::Initialize() 
{ 
    SSLeay_add_ssl_algorithms(); 
    SSL_load_error_strings(); 

    ctx_ = SSL_CTX_new(SSLv23_server_method()); 

    if(!ctx_) { 
    LogEvent("SSL_CTX is bad."); 
    return false; 
    } 

    LogEvent("Before using cert and private key file."); 

    if (SSL_CTX_use_certificate_file(ctx_, CERT_FILE, SSL_FILETYPE_PEM) == 1) { 
    LogEvent("SUCCESS SSL_CTX_use_certificate_file."); 
    } 
    else { 
    LogEvent("FAILED SSL_CTX_use_certificate_file."); 
    return false; 
    } 

    if (SSL_CTX_use_PrivateKey_file(ctx_, KEY_FILE, SSL_FILETYPE_PEM) == 0) { 
    LogEvent("Failed SSL_CTX_use_PrivateKey_file."); 
    return false; 
    } 
    else { 
    LogEvent("SUCCESSFUL SSL_CTX_use_PrivateKey_file."); 
    } 

    if (SSL_CTX_check_private_key(ctx_) == 0) { 
    ERR_print_errors_fp(stderr); 
    LogEvent("Failed SSL_CTX_check_private_key"); 
    return false; 
    } 

    LogEvent("Successfully used cert and private key file."); 

    return true; 
} 

При запуске в качестве службы Windows, единственное сообщение вошедшего является: «Перед использованием сертификата и секретного ключа файла.»

Ничего другого не зарегистрировано. Это для меня означает, что команда SSL_CTX_use_certificate_file (ctx_, CERT_FILE, SSL_FILETYPE_PEM) сбой.

Но почему это работает без проблем, когда одна и та же программа запускается как консоль?

Это информация, которую я нашел в окне просмотра событий:

описание для события с кодом (0) в источнике (OpenSSL) не могут быть найдены. Локальный компьютер может не иметь необходимой информации реестра или сообщения DLL файлов для отображения сообщений с удаленного компьютера. Следующая информация: Входящие Подробности: OPENSSL_Uplink (00341000,08): no OPENSSL_Applink

Любая помощь будет принята с благодарностью.

ответ

0

Хорошо. Сегодня утром я проснулся с решением этой ситуации. Как оказалось, служба Windows не знала, где найти CERT_FILE или KEY_FILE. Приложения, работающие под управлением Windows, будут искать файлы в каталоге% WinDir% \ System32. У меня есть файлы в каталоге приложения, поэтому мне просто пришлось добавить фактический путь к файлам при вызове SSL_CTX_use_certificate_file и SSL_CTX_use_PrivateKey_file.

Теперь он отлично работает.

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