【问题标题】:SSLStream set trusted certificate authorities on server authenticationSSLStream 在服务器身份验证上设置受信任的证书颁发机构
【发布时间】:2016-01-18 15:45:48
【问题描述】:

我正在尝试对存在证书交换的客户端进行身份验证。我遇到的问题是 openssl 客户端拒绝连接尝试,因为身份验证握手中不包含证书颁发机构。

对于在 Windows Server 2008 R2 上运行的实例,这似乎工作正常,但在我的两个开发环境(Windows 10 和 Windows 7)中它都失败了。我已经查看并尝试更改一些可能会阻止添加证书颁发机构但无法使其正常工作的 Windows 设置(主要是本地组策略)。

是不是LocalCertificateSelectionCallback的字符串数组acceptableIssuers字段的功能?

我还发现了另一个相关的stackoverflow php solution,但不知道如何将其应用于 sslstream 类。

我的代码是这样的

var _nwStream = new SslStream(client.GetStream(), true,
(sender, certificate, chain, sslPolicyErrors) =>
{
  bool policyErrs = (sslPolicyErrors & (SslPolicyErrors.RemoteCertificateChainErrors | SslPolicyErrors.RemoteCertificateNotAvailable)) != 0;
  if (policyErrs)
  {
    string message = string.Format("Remote Certificate failed for client: {0}, SSL policy errors {1}", client.Client.RemoteEndPoint, sslPolicyErrors);
    return !policyErrs;
},
(sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers) =>
{
  acceptableIssuers = new string[] { _cert.Issuer };
  return _cert;
});

_nwStream.AuthenticateAsServer(_cert, true, System.Security.Authentication.SslProtocols.Tls, true);

任何帮助将不胜感激 - 谢谢!

【问题讨论】:

    标签: c# .net ssl


    【解决方案1】:

    我不知道为什么它没有早点出现。有一个注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL 调用 SendTrustedIssuerList 设置为 0,将其更改为 1 解决了问题。此标志在 Windows Server 实例上可能默认设置为 1。

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 2011-03-10
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多