簡體   English   中英

openSSL示例上的SSL接受錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM