Windows 7上的SSL客户端SSPI错误

时间:2012-10-14 11:40:08

标签: c# .net ssl sspi

我用C#.NET Win-Forms编写了一个SSL客户端。我将我的证书(公钥)添加到系统根存储(通过.NET代码或手动通过Internet Explorer,两者都有效),它在Windows XP上运行正常,但在Windows 7上有以下 AuthenticationException 尝试 AuthenticateAsClient()
客户端和服务器无法通信,因为它们没有通用算法

Microsoft支持列出一些注册表项的文档,并说明在Windows 7中默认启用(新的强大的)或禁用的(旧的过时的)协议/密码/算法,因此我们可以通过编辑启用/禁用它们注册表。这是这些链接:

How to restrict the use of certain cryptographic algorithms and protocols in Schannel.dll TLS/SSL Cryptographic Enhancements

至于我不擅长加密,我无法理解哪个注册表项与我的案例匹配。这里是我用作客户端的X509Certificate对象的属性:

SignatureAlgorithm.FriendlyName:“ sha1RSA
版本: 3

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

在与Windows注册表项和值进行斗争之后(工作,但是不合逻辑,比如禁用其他一些项目!),我通过启用和编辑 Windows密码套件订单解决了这个问题,而没有更改注册表中的任何内容。

说明:

1 - 在开始>中输入 gpedit.msc 运行... 。将打开本地组策略编辑器。 2 - 转到计算机配置>管理模板>网络> SSL配置设置
3 - 双击右侧的 SSL密码套件订单项 4 - 在打开的窗口中选择启用单选按钮。在左中间有一个文本框,其中有一些逗号分隔的文本。将文本复制/粘贴到空的记事本窗口中 5 - 首先移动您想要的项目(在我的情况下: TLS_RSA_WITH_RC4_128_SHA SSL_CK_RC4_128_WITH_MD5
6 - 用新文本替换旧文本 7 - 与注册表不同,您必须立即重新启动计算机才能使更改生效。

希望它有所帮助。

答案 1 :(得分:0)

服务器可能尝试与AES密码协商SSLv3.0连接。这种组合在技术上是非法的。见http://blogs.msdn.com/b/ieinternals/archive/2009/12/08/aes-is-not-a-valid-cipher-for-sslv3.aspx?Redirected=true