来自自定义库的 Openssl 和 gsoap

Openssl and gsoap from custom library

我们已经将我们的 gsoap 存根 c++ 放入自定义动态库中,针对我们的主程序进行链接和构建。

当我使用 https 调用时,我从 openssl 获得 ERROR_SYSCALL 并看到它在 SSL_Connect.

中失败

准确的错误是:

sk_sort:0xb6cc1680
SOAP 1.2 fault SOAP-ENV:Receiver [no subcode]
"SSL_ERROR_SYSCALL
Error observed by underlying SSL/TLS BIO: Connection reset by peer"
Detail: SSL_connect error in tcp_connect()

如果我直接在我们的主程序中使用相同的代码,它可以正常工作...

我错过了什么?我们的自定义库是动态的,链接也是动态的 openssl...

谨致问候

不完全是自定义库的问题,而是最新的 GSOAP 的问题。 Gsoap 添加 SSL_set_tlsext_host_name 以将 SNI 与 TLS 结合使用。如果您使用带有默认 SSL 证书的基于 IP 的服务器,例如没有 SNI 那么所有调用都会失败 ERROR_SYSCALL

所以我们暂时这样解决了:
SSL_set_tlsext_host_name(soap->ssl, host) - 这会导致系统错误,因为我们使用的是 IP 而不是主机名。服务器丢弃 link 因为主机名是 ip 而不是有效名称。由于我们需要使用 IP 而不是主机名,并且 gsoap 不为此使用任何标志,因此我们注释掉了 stdsoap2.cpp

中的部分

我们刚刚在 stdsoap2.cpp 中搜索了 SSL_set_tlsext_host_name 并注释掉了。

可能 Gsoap 应该为此设置一个标志?