我用 C#.NET Win-Forms 编写了一个 SSL 客户端。我将我的证书(公钥)添加到系统根存储(通过 .NET 代码或通过 Internet Explorer 手动操作,两者都有效)并且它在 Windows XP 上工作正常,但在 Windows 7 上有以下 AuthenticationException 当尝试AuthenticateAsClient() :
"客户端和服务器无法通信,因为它们不具备通用算法"
Microsoft 支持文档列出一些注册表项并说明在 Windows 7 中默认启用(新的强项)或禁用的(旧的过时的)协议(protocol)/密码/算法,因此我们可以通过编辑启用/禁用它们注册表。这是这些链接:
How to restrict the use of certain cryptographic algorithms and protocols in Schannel.dll TLS/SSL Cryptographic Enhancements
就我不擅长密码学而言,我无法理解哪个注册表项与我的情况相匹配。这是我用作客户端的 X509Certificate 对象的属性:
SignatureAlgorithm.FriendlyName : "sha1RSA"
版本:3
有人可以帮忙吗?
最佳答案
在与 Windows 注册表项和值(有效,但不合逻辑,就像禁用其他一些项目一样!)苦苦挣扎之后,我通过启用和编辑 Windows Cipher Suite Order 解决了这个问题,而没有更改注册表中的任何内容.
说明:
1 - 在开始 > 运行... 中输入 gpedit.msc。 本地组策略编辑器 打开。
2 - 转到计算机配置 > 管理模板 > 网络 > SSL 配置设置。
3 - 双击右侧的SSL Cipher Suite Order项。
4 - 在打开的窗口中选择启用单选按钮。在中间左侧有一个文本框,其中包含一些逗号分隔的文本。将文本复制/粘贴到一个空的记事本窗口中。
5 - 首先移动您想要成为的项目(在我的例子中:TLS_RSA_WITH_RC4_128_SHA 和 SSL_CK_RC4_128_WITH_MD5)
6 - 用新文本替换旧文本。
7 - 与注册表不同,您现在必须重新启动计算机才能使更改生效。
希望对您有所帮助。
关于c# - Windows 7 上的 SSL 客户端 SSPI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881868/