来自自定义库的 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 应该为此设置一个标志?
我们已经将我们的 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 应该为此设置一个标志?