.NET 的 SslStream 总是与我拥有的最不安全的密码进行协商。我怎样才能改变这个?

StackOverflow https://stackoverflow.com/questions/91304

  •  01-07-2019
  •  | 
  •  

SslStream 应该协商密码类型、密钥长度、哈希算法等。及其对等 SSL 堆栈。当在我的代码中使用它时,我发现协商始终默认为 RC4 和 MD5。我想使用 3DES 或 AES 来增加安全性。

环顾网络,我发现只有一些关于这个问题的参考,没有解决方案;一位发帖者声称这实际上是有道理的,因为两个堆栈之间的最低共同点是安全的,同时具有更快/使用更少 CPU 资源的额外好处。虽然这在技术上可能是正确的,但我在复杂性和成本之间的特殊权衡在于其他地方(我更喜欢使用带有长密钥的 AES)。

如果有人可以帮助我,我将不胜感激。

有帮助吗?

解决方案

您可以通过进行一些简单的注册表更改来选择可供选择的协议。例如,我们删除了选择 RC4 的功能。您只需要在连接的一端(例如服务器)进行更改,因为客户端和服务器协商找到通用支持的算法

http://msdn.microsoft.com/en-us/library/ms925716.aspx

祝詹姆斯

其他提示

SSLStream 使用操作系统附带的 Schannel。这些套件按 Microsoft Schannel 提供商选择的默认顺序列出:

Windows Vista:

带有 AES_128 CBC SHA 的 RSA
带有 AES_256 CBC SHA 的 RSA
具有 RC4_128 SHA 的 RSA

...

Windows XP:

带有 RC4 128 MD5 的 RSA
具有 RC4 128 SHA 的 RSA

具有 3DES CBC SHA 的 RSA

....

您还可以通过配置来修改密码套件列表 SSL 密码套件顺序 使用 Microsoft 管理控制台 (Windows Vista) 中的组策略对象管理单元进行组策略设置

但问题是 Windows XP 不包括 AES 在 SSLStream 可用的密码列表中。但是,可以更改 Windows XP 中的注册表设置:HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy 1 用于获取 3DES 密码。

它应该使用两个列表中最安全的算法集。我很难相信事实并非如此,因为 SslStream 正在包装 SChannel SSPI,如果它被破坏,那么 Internet Explorer、IIS 和 Windows 上的其他所有内容也会被破坏。

可能是您的 SChannel.dll/Secur32.dll 版本已过时。您安装的操作系统和 Internet Explorer 版本是什么?

有可能 禁用 SCHANNEL 中的协议. 。你能检查一下这件事还没有完成吗?

我正在使用 XP SP3 和 IE7 以及所有更新。注册表似乎配置了所有启用的功能。

在 Java 中,您可以根据您的需要和偏好订购各种算法/密码。.NET 中可能有类似的 API...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top