每个代码都可以正常运行。使用Visual Studio进行调试是个问题。
我正在使用带有c ++ 11的openSSL库制作Linux服务器。
服务器在VMware的CentOS上运行。 (完成后将移至Azure)
我在Visual Studio 2017上工作,并与该CentOS交叉编译。
当我打电话
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
此功能在ssl库中,它将打开私钥文件,在标准输入中要求我输入密码,在标准输出中显示消息并等待我的输入。
但是,如果我在Visual Studio调试模式下运行,它将消失。
当我在CentOS上使用.out文件,并且该'.out'文件由Visual Studio编译以进行调试时,效果很好。
这不是路径问题。 “ .crt”文件可以很好地打开,而同一文件夹中只有“ .key”文件不能很好地打开。
这些是发生问题的代码。 SslUtil,ExceptionSslUtil类在我自己的代码中。但是此代码中的所有其他功能和结构都在ssl库中。
void SslUtil::InitAsServer(const char* pathCert, const char* pathKey) {
amIServer = true;
SSL_load_error_strings();
SSLeay_add_ssl_algorithms();
meth = SSLv23_server_method();
ctx = SSL_CTX_new(meth);
if (!ctx)
throw ExceptionSslUtil("ctx create error");
if (SSL_CTX_use_certificate_file(ctx, pathCert, SSL_FILETYPE_PEM) <= 0)
throw ExceptionSslUtil("cert file open error");
if (SSL_CTX_use_PrivateKey_file( ctx, pathKey, SSL_FILETYPE_PEM) <= 0)// here's the problem.
throw ExceptionSslUtil("private key file open error");
if (!SSL_CTX_check_private_key(ctx))
throw ExceptionSslUtil("Private key does not match the certificate public keyn");
return;
}
未阻止SSL_CTX_use_PrivateKey_file函数的输入,仅返回负值。它必须等待输入,而不必等待。
我不知道那里发生了什么。 以前有效,
但是当我将原始main(argc,argv)函数更改为mainSslEpoll(argc,argv)并使其被其他main函数调用时,会发生此问题...为什么? 以下是我的新主要功能。
int main(int argc, char** argv) {
string str;
while (true) {
cout << "select mode" << endl;
cout << "\t" << "0:SSL + Epoll server" << endl;
cout << "\t" << "1:SSL server" << endl;
cout << "\t" << "2:SSL client" << endl;
cin >> str;
if (str[0] == '0') return mainSslEpoll(argc, argv);
if (str[0] == '1') return mainSslServer(argc, argv);
if (str[0] == '2') return mainSslClient(argc, argv);
}
}