簡體   English   中英

使用TLS 1.2將客戶端連接到TCP服務器

[英]Connecting a client to a TCP server using TLS 1.2

我正在努力將設備連接到.Net(4.5.2)服務器。 它是由設備打開的TCP連接,使用TLS 1.2。

  • 在服務器端,我有一個TCP服務器的標准.Net實現: SslStream通過DotNetty包裝
  • 我無法更改設備上的任何內容

任何.Net客戶端都可以使用安全的TLS連接成功連接到我的服務器。 它在使用CURL時也正常工作,所以我得出結論我的TCP服務器工作正常。

所以我比較了(使用Wireshark)工作客戶端發送的內容與無法連接的設備發送的內容。 我發現的顯着差異是客戶端Hello TLS消息中缺少(對於設備) 服務器名稱擴展(SNI)

我接下來嘗試的是使用Pcap.Net手動將數據發送到我的服務器,即使用原始字節數組手動發送TCP SYN / TCP ACK /客戶端Hello消息(我從嘗試連接的設備獲得的原始數據(感謝Wireshark)到我的服務器)。 我確認通過添加服務器名稱擴展來調整不工作的客戶端Hello原始字節數組會導致我的TLS握手工作。

所以很明顯我遇到了一個問題,那就是不包含SNI擴展的客戶端和一個拒絕握手的服務器,如果這個信息不存在的話。

如何更改TCP服務器接受不提供服務器名稱擴展的客戶端的行為方式? 是否有可能首先使用標准的.Net SslStream類?

AFAIK,SNI擴展不是強制性的,由客戶決定是否使用它,因此服務器理論上應該接受沒有它的客戶端Hello消息。

任何指針都將非常感激。

.Net 4.5.2支持TLS1.2,但默認情況下禁用。

要啟用它,您必須明確定義安全協議集。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

有關更多信息,請參閱以下鏈接https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol%28v=vs.110%29.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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