3

我正在尝试以客户端身份进行连接,但SSL我看到了一些奇怪的行为。SSL_CTX_new尝试创建新SSL上下文时,内部出现间歇性分段错误。还应该注意的是,这是一个fCGI demon, 并且只有在这样运行时才会出现问题。如果我将它作为独立cgi应用程序运行,问题似乎消失了。

查看核心文件,这就是我所看到的:

夹板(??,??)在0xd03c36f4在0xd03c5bcc
malloc_y(0x4c,为0x0,0x9e,为0x0,0x20062240,量0x170,为0x0,为0x0)
malloc_common_81_64(??)在0xd03512b8
mem.default_malloc_ex()在0xd0b0f784
CRYPTO_malloc_24_10()在0xd0b101c8
ssl_cert .ssl_cert_new() 在 0xd6f86084
ssl_lib.SSL_CTX_new() 在 0xd6f83084

有没有人遇到过类似的事情?搜索以前的问题出现了一些关于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,你会出现段错误。

于 2012-10-04T15:48:33.013 回答
0

缺少一个好的解决方案。为了满足我的 SSL 需求,我已求助于 libcurl。这似乎简化了我实际必须编写的代码。

于 2012-10-08T16:10:55.360 回答