2016-09-30 72 views
0

我們已將我們的gsoap存根C++放入自定義動態庫中,並將其與我們的主程序鏈接並構建。Openssl和自定義庫中的gsoap

當我使用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可以...

隨着親切的問候

+0

奇怪的看起來像是一個gsoap問題。舊版本不工作。相同的代理定義只是升級版本....什麼可能是錯誤的? – Lonko

+0

確實,我們添加了第二個Web服務,錯誤類似於此步驟:http://openssl.6102.n7.nabble.com/SSL-read-returns-SSL-ERROR-SYSCALL-td24361.html – Lonko

+0

需要更多的信息,如客戶端信息,服務器信息,客戶端的安全傳輸(我認爲它的OpenSSL),服務器安全傳輸,防火牆配置,OpenSSL版本。 – jww

回答

0

不完全問題,自定義庫,但與最新gSOAP的。 Gsoap添加了SSL_set_tlsext_host_name以將SNI與TLS結合使用。如果您使用基於IP的服務器並使用默認的SSL證書,例如沒有SNI那麼所有呼叫都將失敗,並ERROR_SYSCALL

因此,我們解決了它這樣的現在:
SSL_set_tlsext_host_name(soap-> SSL,主機) - 這會導致錯誤SYSCALL因爲我們使用IP而不是主機名。並且服務器刪除鏈接,因爲主機名是ip而不是有效的名稱。由於我們需要使用IP而不是主機名,gsoap不使用任何標誌,所以我們在stdsoap2.cpp中註釋了該部分。

我們只在stdsoap2.cpp中搜索了SSL_set_tlsext_host_name並將其註釋掉了。

可能Gsoap應該有一個標誌呢?