2013-09-24 49 views
1

我正在編寫一個連接到遠程服務器並使用自簽名證書的程序。我在程序中的幾個點出現以下錯誤。X509_STORE_add_lookup()中的分段錯誤

Program received signal SIGSEGV, Segmentation fault. 
0xb7ec3688 in X509_STORE_add_lookup() from /lib/i386-linux-gnu/libcrypto.so.1.0.0 

此時:

if (!SSL_CTX_load_verify_locations(
       ssl_ctx_p, "bundle_test.p12.pem", NULL)) 

而另:

Program received signal SIGSEGV, Segmentation fault. 
0xb7ec389e in X509_STORE_get_by_subject() from /lib/i386-linux-gnu/libcrypto.so.1.0.0 

這裏:

ssl_ret = SSL_connect(ssl_p); 

我是很新的這一點,不知道是怎麼回事錯了,如果有人可以提出更好的調試方法或找出問題,我將不勝感激!

+0

沒有更多的情況下,我可以建議是,你使用'-Wall -Wextra'編譯所有源和修復代碼,直到沒有更多的警告在編譯過程中發出的,然後用選項'-g'和運行編譯通過gdb的應用程序。這將爲您提供崩潰後的詳細回溯,您還可以在其中檢查變量。 – alk

回答

1

該函數本身並沒有太多工作。在這個函數內部而不是在X509_STORE_load_locations()內部引起segfault的唯一可能是指針解除引用ctx->cert_store。請確認ssl_ctx_p是有效的上下文,而不是NULL

int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, 
       const char *CApath) 
     { 
     return(X509_STORE_load_locations(ctx->cert_store,CAfile,CApath)); 
     }