【发布时间】:2018-01-28 23:43:32
【问题描述】:
我们在用 c 编写的启用 ssl 的 web socket 客户端程序中使用 libwebsockets 1.3,我们在安装了 openssl 1.0.1 的 Centos 6.5 上编译,制作了一个 .so 库,该库后来在星号中使用。编译正常,但我收到此运行时错误:
problem creating ssl context 336236705: error:140A90A1:lib(20):func(169):reason(161)
通过 libwebsockets 代码,我发现了生成错误消息的部分(lib/ssl.c 第 90 行):
/* 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() 我得到:
3077879544:error:140A90A1:lib(20):func(169):reason(161):ssl_lib.c:1802:
我们调用 libwebsocket_create_context 的部分代码如下所示:
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 库,该库用于我们修改后的 asterisk 版本(据我所知,它本身使用 openssl)。
【问题讨论】:
标签: c openssl centos asterisk libwebsockets