服务器在Openssl初始化时失败

时间:2014-12-12 00:08:52

标签: c++ ssl service console server

我正在使用Visual Studio 6.0编写的win32文件服务器。它配置了SSL并在2000年开始工作,但从那时起就没有使用过。

现在,我们要使用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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

现在工作正常。