簡體   English   中英

無法在C#中使用SslStream接受.net框架4.6的TLS 1.2協議

[英]Can't get SslStream in C# to accept TLS 1.2 protocol with .net framework 4.6

我制作了一個應該接受SSL連接的程序。 我希望它只接受TLS 1.2來提高安全性。

為此,我已經在Windows 7 Professional SP1 pc上使用Visual Studio 2015 express安裝了.net framework 4.6並編譯了SW。 VS中“應用程序”下的目標框架已設置為4.6

在SW我使用SslStream方法驗證證書,並確保只使用TLS 1.2,我輸入行

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

我嘗試在main()和插入新的SSL流之前插入這一行

對於測試我使用openssl連接,使用命令:

openssl s_client -connect 10.0.0.101:1400 -tls1_2 -cert MyCert.pem -key private.pem -CAfile entrust.cer

我的問題是C#程序得到以下異常:

例外:對SSPI的調用失敗,請參閱內部異常。

內部異常:不支持請求的功能

OpenSsl的輸出是

CONNECTED(00000150)7964:錯誤:1408F10B:SSL例程:SSL3_GET_RECORD:版本號錯誤:。\\ ssl \\ s3_pkt.c:362:

沒有可用的對等證書

沒有發送客戶端證書CA名稱

SSLL握手讀取5個字節並寫入7個字節

新的,(無),密碼是(無)安全重新協商不受支持壓縮:無擴展:無否ALPN協商SSL會話:協議:TLSv1.2密碼:0000會話ID:會話ID-ctx:主密鑰:Key-Arg:無PSK標識:無PSK標識提示:無SRP用戶名:無開始時間:1457011106超時:7200(秒)驗證返回碼:0(ok)

如果我使用-tls1沒有問題,所以我認為這是因為.net SslStream不支持tls1_2(或tls1_1)

有沒有人可以解釋我做錯了什么

/卡斯滕

ServicePointManager安裝程序將修復Web調用(例如使用WebClient),但對於SslStream,您需要更多。 您需要在調用AuthenticateAsClient時提供可接受的安全協議。 而不是

sslStream.AuthenticateAsClient(hostname);

做這個

sslStream.AuthenticateAsClient(hostname, null, SslProtocols.Tls12, true);

暫無
暫無

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

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