2013-12-08 131 views
0

我試圖將套接字程序轉換爲SSL。我只是佈局初始設置,並且遇到了一些我不知道如何解決的運行時錯誤。注意:在c文件所在的目錄中有一個名爲'my_server.pem'的文件。設置SSL - 初始步驟

任何人都可以幫助我嗎?謝謝!

#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

從錯誤中,它看起來像它無法找到my_server.pem文件。即使它位於C代碼的相同位置,它仍然可以在您的程序中訪問,因爲它將在工作目錄中顯示時的名稱。

因此,將文件移動到應用程序的工作目錄,或給出指向該文件的文件的相對路徑或絕對路徑。

要進一步診斷,請在讀取模式下用fopen打開文件,如果失敗,請查看最後一個錯誤。

如果您的fopen能夠打開該文件,那麼還有一些其他問題。

+0

謝謝。我不能使用絕對路徑,否則這個分鐘會在另一臺機器上使用。至於相對路徑,我不知道如何給相同的目錄提供相對路徑。 – Alex

+0

你的exe文件與C文件在同一個文件夾中嗎? – doptimusprime

+0

如果不是,則將您的證書文件放在與exe相同的位置。並確保這是一個有效的證書文件。 – doptimusprime

0

嘗試提供完整路徑而不是"my_server.pem"example here

或者,嘗試放null代替"my_server.pem"並把目錄路徑,而不是nullrefernce here