我正在尝试将套接字程序转换为SSL。我只是在进行初始设置,并且遇到了一些我不知道如何解决的运行时错误。注意:在与c文件相同的目录中有一个名为“my_server.pem”的文件。
任何人都可以帮助我吗?谢谢!
#include <openssl/bio.h> // BIO objects for I/O
#include <openssl/ssl.h> // SSL and SSL_CTX for SSL connections
#include <openssl/err.h> // Error reporting
int main(int argc, char *argv[]) {
// data structures for SSL
BIO *bio;
SSL *ssl;
SSL_CTX *ctx;
// initialize openSSL
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
// set up the SSL context
ctx = SSL_CTX_new(SSLv23_client_method());
if (ctx == NULL)
fprintf(stderr, "context is null\n");
// load the trust store
if (! SSL_CTX_load_verify_locations(ctx, "my_server.pem", NULL)) {
fprintf(stderr, "Error loading trust store\n");
ERR_print_errors_fp(stderr);
SSL_CTX_free(ctx);
return 0;
}
fprintf(stderr, "made it\n");
//...
return 0;
}
以下是错误消息:
140735285130080:error:02001002:system library:fopen:No such file or directory:bss_file.c:169:fopen('my_server.pem','r')
140735285130080:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:172:
140735285130080:error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib:by_file.c:274:
答案 0 :(得分:0)
从错误中看,它似乎无法找到my_server.pem
文件。即使它位于您的C代码的相同位置,它也可以被您的程序访问,因为它将在工作目录中显示它的名称。
因此,要么将文件移动到应用程序的工作目录,要么给出指向该文件的文件的相对或绝对路径。
要进一步诊断,请在读取模式下使用fopen
打开文件,如果失败,请查看上一个错误。
如果您的fopen
能够打开该文件,那么还有其他一些问题。
答案 1 :(得分:0)
尝试提供完整路径,而不是"my_server.pem"
example here。
或者,请尝试将null
代替"my_server.pem"
并将路径添加到目录而不是null
refernce here。