gpt4 book ai didi

c++ - 服务器在 Openssl 初始化时失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:47 43 4
gpt4 key购买 nike

我正在使用 Visual Studio 6.0 编写的 win32 文件服务器上工作。它在 2000 年配置了 SSL 并可以正常工作,但此后一直没有使用过。

现在,我们想使用 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) 正在崩溃。

但为什么当同一个程序作为控制台运行时它可以毫无问题地工作?

这是我在事件查看器中找到的信息:

无法找到源 (OPENSSL) 中事件 ID (0) 的描述。这本地计算机可能没有必要的注册信息或消息 DLL文件以显示来自远程计算机的消息。以下信息是部分事件:OPENSSL_Uplink(00341000,08):没有OPENSSL_Applink

我们将不胜感激。

最佳答案

好的。我今天早上醒来时发现了这种情况的解决方案。事实证明,Windows 服务不知道在哪里可以找到 CERT_FILE 或 KEY_FILE。作为 Windows 服务运行的应用程序将在 %WinDir%\System32 目录中查找文件。我在应用程序目录中有这些文件,所以我只需在调用 SSL_CTX_use_certificate_file 和 SSL_CTX_use_PrivateKey_file 时添加文件的实际路径。

它现在工作正常。

关于c++ - 服务器在 Openssl 初始化时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27434784/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com