首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在星号中使用libwebsocket+ ssl创建ssl上下文140A90A1:lib(20):func(169):原因(161)

在星号中使用libwebsocket+ ssl创建ssl上下文140A90A1:lib(20):func(169):原因(161)
EN

Stack Overflow用户
提问于 2014-12-22 10:30:57
回答 4查看 3.4K关注 0票数 2

我们在用c ++编写的启用ssl的web套接字客户端程序中使用libwebsockets 1.3,在安装了OpenSSL1.0.1的CentOS6.5上进行编译,生成一个.so库,稍后以星号表示。编译进行得很好,但是我得到了这个运行时错误:

代码语言:javascript
运行
复制
problem creating ssl context 336236705: error:140A90A1:lib(20):func(169):reason(161)

在阅读libwebsocket代码时,我发现了生成错误消息的部分(lib/ssl.c第90行):

代码语言:javascript
运行
复制
/* basic openssl init */

SSL_library_init();

OpenSSL_add_all_algorithms();
SSL_load_error_strings();

openssl_websocket_private_data_index =
    SSL_get_ex_new_index(0, "libwebsockets", NULL, NULL, NULL);

/*
 * Firefox insists on SSLv23 not SSLv3
 * Konq disables SSLv2 by default now, SSLv23 works
 */

method = (SSL_METHOD *)SSLv23_server_method();

if (!method) {
    error = ERR_get_error();
    lwsl_err("problem creating ssl method %lu: %s\n", 
        error, ERR_error_string(error,
                      (char *)context->service_buffer));
    return 1;
}

context->ssl_ctx = SSL_CTX_new(method); /* create context */
if (!context->ssl_ctx) {
    error = ERR_get_error();
    lwsl_err("problem creating ssl context %lu: %s\n",
        error, ERR_error_string(error,
                      (char *)context->service_buffer));
    return 1;
}

根据我在网络上看到的例子,我在过去几天一直在绞尽脑汁,搜索和尝试所有的东西,包括重新安装不同版本的openssl、更改上面的代码、用其他方法替换SSLv23_server_method等等……但没办法,有人知道问题出在哪里吗?

附加信息:使用ERR_print_errors_fp()我得到:

代码语言:javascript
运行
复制
3077879544:error:140A90A1:lib(20):func(169):reason(161):ssl_lib.c:1802:

调用libwebsocket_create_context的部分代码如下所示:

代码语言:javascript
运行
复制
int opts = 0;

const char *interface = NULL;

int listen_port;

memset(&wsInfo, 0, sizeof wsInfo);

listen_port = CONTEXT_PORT_NO_LISTEN;

wsInfo.port = listen_port;
wsInfo.iface = interface;
wsInfo.protocols = protocols;
wsInfo.extensions = libwebsocket_get_internal_extensions();

wsInfo.gid = -1;
wsInfo.uid = -1;
wsInfo.options = opts;

wsContext = libwebsocket_create_context(&wsInfo);

这个程序被编译成一个.so库,这个库在我们修改后的星号版本中使用(据我所知,它本身使用openssl )。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-25 09:30:51

问题是星号覆盖了所有openssl初始化函数,包括SSL_library_init()main\libasteriskssl.c中的OpenSSL_add_all_algorithms(),并将它们替换为什么都不做的虚拟函数,相反,它定义了一个ast_ssl_init(),它执行所有初始化,并在main/asterisk.c中的main()中调用一次,我的代码恰好在调用之前。

票数 1
EN

Stack Overflow用户

发布于 2014-12-29 04:56:17

创建ssl上下文336236705问题:错误:140A90A1:lib(20):func(169):原因(161)

这可能有助于:

代码语言:javascript
运行
复制
$ openssl errstr 0x140A90A1
error:140A90A1:SSL routines:SSL_CTX_new:library has no ciphers

“库没有密码”是库未初始化的确定标志。请参阅OpenSSL的wiki页面,介绍如何在库初始化上对库进行弱化。

因为星号是在做非常聪明的事情,你应该检查它还在做什么。特别是,您应该确保它不使用弱/受伤/损坏的协议和密码套件。在SSL/TLS客户端中可以找到一个如何改进安全态势的示例。该示例确保TLS1.0及以上版本,并使用“强”密码套件。

票数 3
EN

Stack Overflow用户

发布于 2018-01-28 15:43:32

通过使用使用boost asio的库,我也得到了这个错误。库是针对openssl-1.0编译的,而我的二进制文件是根据openssl-1.1编译的。

切换我的二进制文件也使用openssl-1.0解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27600866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档