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