设置SSL - 初始步骤

时间:2013-12-08 03:59:48

标签: c sockets ssl openssl

我正在尝试将套接字程序转换为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:

2 个答案:

答案 0 :(得分:0)

从错误中看,它似乎无法找到my_server.pem文件。即使它位于您的C代码的相同位置,它也可以被您的程序访问,因为它将在工作目录中显示它的名称。

因此,要么将文件移动到应用程序的工作目录,要么给出指向该文件的文件的相对或绝对路径。

要进一步诊断,请在读取模式下使用fopen打开文件,如果失败,请查看上一个错误。

如果您的fopen能够打开该文件,那么还有其他一些问题。

答案 1 :(得分:0)

尝试提供完整路径,而不是"my_server.pem" example here

或者,请尝试将null代替"my_server.pem"并将路径添加到目录而不是null refernce here