.NET的SslStream一直在协商我拥有的最不安全的密码。我该如何更改?

时间:2020-03-06 14:20:38  来源:igfitidea点击:

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

环顾网上,我发现只有很少的参考文献提到了这个问题,没有解决方案。一位发帖人声称这实际上是有道理的,因为两个堆栈之间的最低公分母是安全的,同时具有更快/使用更少的CPU资源的额外好处。尽管从技术上讲这可能是正确的,但我在复杂性和成本之间的特殊权衡还是在其他地方(我更喜欢使用带有长键的AES)。

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

解决方案

它应该使用两个列表中最安全的一组算法。我发现很难相信事实并非如此,因为SslStream包装了SChannel SSPI,并且如果该SSPI被破坏,则Internet Explorer,IIS和Windows上的所有其他内容也将被破坏。

可能是我们具有SChannel.dll / Secur32.dll的过时版本。我们安装了什么操作系统和Internet Explorer版本?

可以在SCHANNEL中禁用协议。我们可以检查是否尚未完成吗?

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

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

SSLStream使用操作系统随附的Schannel。
这些套件以默认顺序列出,Microsoft Schannel Provider为它们选择的顺序为:

Windows Vista:

RSA WITH AES_128 CBC SHA

  RSA WITH AES_256 CBC SHA

  RSA WITH RC4_128 SHA
  
  ...

Windows XP:

RSA WITH RC4 128 MD5

  RSA WITH RC4 128 SHA 
  
  RSA WITH 3DES CBC SHA
  
  ....

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

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

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

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

最好的祝愿
詹姆士