3

クライアントとして接続しようとしていますがSSL、奇妙な動作が見られます。新しいコンテキストSSL_CTX_newを作成しようとすると、内部で断続的なセグメンテーション エラーが発生します。SSLこれは でありfCGI demon、そのように実行している場合にのみ問題があるように見えることにも注意してください。スタンドアロンcgiアプリケーションとして実行すると、問題は解消されたようです。

コア ファイルを調べると、次のように表示されます。

splint (??, ??) at 0xd03c36f4
malloc_y(0x4c, 0x0, 0x9e, 0x0, 0x20062240, 0x170, 0x0, 0x0) at 0xd03c5bcc
malloc_common_81_64(??) at 0xd03512b8
mem.default_malloc_ex() at 0xd0b0f784
CRYPTO_malloc_24_10() at 0xd0b101c8
ssl_cert 0xd6f86084 の .ssl_cert_new() 0xd6f83084 の
ssl_lib.SSL_CTX_new()

誰かが似たようなことに遭遇しましたか?以前の質問を検索すると、 をSSL_CTX_new返すことについての議論がいくつか見つかりましNULLたが、セグメンテーション違反の報告はありませんでした。

新しいコンテキストを作成するために使用している関数は次のとおりです。

SSL_CTX* newSSLContext(char* keyfile, char* password) {  
   SSL_METHOD *meth;  
   SSL_CTX *ctx;  
   if (!bio_err) {  
      SSL_library_init();  
      SSL_load_error_strings();  
      bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);  
   }  
   signal(SIGPIPE, sigpipe_handle);  
   meth = SSLv23_method();  
   ctx = SSL_CTX_new(meth);  
   if (!(SSL_CTX_use_certificate_chain_file(ctx, keyfile))) {  
      err("Can't read certificate file");  
      return NULL;  
   }  
   pass = password;  
   SSL_CTX_set_default_passwd_cb(ctx, password_cb);  
   if (!(SSL_CTX_use_PrivateKey_file(ctx, keyfile, SSL_FILETYPE_PEM))) {  
      err("Can't read key file");  
      return NULL;
   }  
   if (!(SSL_CTX_load_verify_locations(ctx, keyfile, 0))) {  
      err("Can't read CA list");  
      return NULL;  
   }  
   return ctx;  
}
4

2 に答える 2

4

bio_err変数を NULLに初期化していますか? SSL_library_initの前に呼び出さないとSSL_CTX_new、segfault が発生します。

于 2012-10-04T15:48:33.013 に答える
0

良い解決策にはほど遠い。SSL のニーズのために、libcurl に切り替えることにしました。これにより、実際に書かなければならないコードが合理化されているようです。

于 2012-10-08T16:10:55.360 に答える