无法让 C# 中的 SslStream 接受带有 .net Framework 4.6 的 TLS 1.2 协议

本文关键字:Framework TLS 协议 net 中的 SslStream | 更新日期: 2023-09-27 18:37:22

>我做了一个应该接受SSL连接的程序。我希望它只接受TLS 1.2以提高安全性。

为此,我已经安装了.net framework 4.6并在Windows 7 Professional SP1 PC上使用Visual studio 2015 express编译了软件。VS 中"应用程序"下的目标框架已设置为 4.6

在软件中,我使用 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 的输出是

已连接(00000150) 7964:错误:1408F10B:SSL 例程:SSL3_GET_RECORD:错误的版本号:.''ssl''s3_pkt.c:362:

没有可用的对等证书

未发送客户端证书 CA 名称

SSLL 握手已读取 5 个字节并写入 7 个字节

新,(无),密码是(无)不支持安全重新协商 压缩:无 扩展:无 无 ALPN 协商的 SSL 会话: 协议 : TLSv1.2 密码 : 0000 会话 ID: 会话 ID-ctx: 万能钥匙: 键参数 : 无 PSK 标识:无 PSK 标识提示:无 SRP 用户名:无 开始时间:1457011106 超时 : 7200 (秒) 验证返回代码:0(正常)

如果我使用 -tls1 没有问题,所以我假设这是因为 .net SslStream 不支持tls1_2(或tls1_1)

有没有人可以解释我做错了什么

/卡斯滕

无法让 C# 中的 SslStream 接受带有 .net Framework 4.6 的 TLS 1.2 协议

ServicePointManager安装程序将修复Web调用(例如使用WebClient),但对于SslStream,您需要更多。您需要在对 AuthenticateAsClient 的调用中提供接受的安全协议。所以而不是

sslStream.AuthenticateAsClient(hostname);

这样做

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