[英]OpenSSL SSL_read() returns 0 and SSL_get_error() returns 6, what can I do to fix this?
[英]SSL Accept error on openSSL examples
我正在嘗試運行openSSL示例(從此處下載源)。 我設法構建它並在端口4433上運行“服務器”示例(使用VirtualBox在Ubuntu 12.10虛擬機上運行)
然后,我嘗試從Windows 8啟動客戶端,但是在服務器的終端上,我不斷收到SSL accept error
消息。
我看到了這篇文章,並從接受的答案中復制了bash腳本,使用它,我設法創建了一個新的root.pem和其他證書,但是我仍然遇到相同的錯誤
(不知道是否重要,我正在使用端口4433,因為由於某種原因VM無法綁定到443,是的,我也在客戶端上進行了更改)
另外,服務器使用C語言編寫。
有任何想法嗎? 謝謝!
編輯
我發現錯誤發生在這一行
r=SSL_accept(ssl);
我檢查了使用返回到r的錯誤
SSL_get_error(ssl,r);
它似乎是SSL_ERROR_SYSCALL
我檢查了ERR_get_error();
它返回0
含義
如果ret == 0,則觀察到違反協議的EOF
還不確定這意味着什么。
編輯2
我檢查了客戶端返回碼,根據MSDN,它是錯誤12045
,
ERROR_INTERNET_INVALID_CA
12045
該功能不熟悉生成服務器證書的證書頒發機構。
但是,當使用虛擬機提供的客戶端時,連接正常並且沒有證書問題
覆蓋12045
如圖微軟在這里 ,導致12038
錯誤,這是
ERROR_INTERNET_SEC_CERT_CN_INVALID
SSL certificate common name (host name field) is incorrect. For example, if you entered www.server.com and the common name on the certificate says www.different.com.
這有幫助嗎? 再次感謝!
由於錯誤代碼為SSL_ERROR_SYSCALL且r
為零,因此客戶端確實通過調用close()
或shutdown()
正常關閉了基礎TCP連接。
您應該從客戶端代碼中查找可能導致TCP連接關閉的原因。
編輯:根據問題的edit2:
證書存在一些問題。
我建議在測試過程中使用自簽名證書,以避免證書鏈出現問題。 當一切正常時,然后開始使用更復雜的證書。
因為您得到ERROR_INTERNET_SEC_CERT_CN_INVALID
,所以證書中的通用名稱(CN)可能有誤。 檢查證書的Subject:
字段。 主題中有CN=xxxxx
。 xxxxx必須與主機的IP /主機名相同。
或者,您也可以從客戶端代碼中刪除通用名稱檢查。 該示例中可能包含以下代碼:
if(require_server_auth)
check_cert(ssl,host);
注釋掉它或設置require_server_auth=0
。 然后再試一次。
這可能意味着在SSL握手的“接受”階段發生了一個錯誤。
另外,我認為openSSL有一個詳細選項。 -v我認為。
您是否正在使用數據包嗅探器(Wireshark,Ethereal)來幫助調試?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.