c# - Windows 7 上的 SSL 客户端 SSPI 错误

标签 c# .net ssl sspi

我用 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_SHASSL_CK_RC4_128_WITH_MD5)
6 - 用新文本替换旧文本。
7 - 与注册表不同,您现在必须重新启动计算机才能使更改生效。

希望对您有所帮助。

关于c# - Windows 7 上的 SSL 客户端 SSPI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881868/

相关文章:

c# - 单声道可以制作解决方案文件(.sln)

c# - 将 SQL 转换为 C# Entity Framework Linq

.net - 使用 MemoryStream 保存 .docx 文件 C#

Mongodb 连接尝试失败 : SSLHandshakeFailed: SSL peer certificate validation failed: self signed certificate

php - 具有相同配置的两台服务器 - ldap_bind 在一台上工作,在另一台上失败

c# - 如何向属性添加方法?

c# - 是否有将 System.Threading.Tasks 与 WCF 服务代理一起使用的有效方法?

c# - 为什么抽象类可以有实例方法?

javascript - jquery 无法在我的 asp 页面上运行

curl - SSL:无法从对等证书获取公用名