c++ - 来自自定义库的 Openssl 和 gsoap

标签 c++ ssl openssl gsoap

我们已经将我们的 gsoap stubs 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) - 这会导致 ERROR SYSCALL,因为我们使用的是 IP 而不是主机名。服务器丢弃链接,因为主机名是 ip 而不是有效名称。由于我们需要使用 IP 而不是主机名,并且 gsoap 不为此使用任何标志,因此我们注释掉了 stdsoap2.cpp 中的部分

我们只是在 stdsoap2.cpp 中搜索 SSL_set_tlsext_host_name 并注释掉。

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

关于c++ - 来自自定义库的 Openssl 和 gsoap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798828/

相关文章:

c++ - 按引用移动字符串?

C++ 从数组中取出前 n 个元素

c - 如何实现服务器名称指示(SNI)

c++ - openssl RSA_private_decrypt 和 RSA_private_encrypt 有什么区别?

aes - 我需要多个 EVP_CIPHER_CTX 结构吗?

php - 如何验证公钥属于私钥?

c++ - 显示窗口的简约 Visual C++ 应用程序

c++ - 如何在 QGraphicsScene 上绘制一个点(通过鼠标单击)?

ssl - curl :(35)错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议(protocol)

java - 带有JDK11的Kubernetes中的Spring Boot随机 "SSLException: Connection reset"