【问题标题】:Why do I get RemoteCertificateNameMismatch?为什么我会收到 RemoteCertificateNameMismatch?
【发布时间】:2020-06-06 01:34:57
【问题描述】:

我有以下 C# 客户端代码来检查 SSL 通信中的传入证书(使用 WCF):

private bool ValidateClientCertificate(System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
        _certificateValid = sslPolicyErrors == System.Net.Security.SslPolicyErrors.None ? true : false;
        return true;
    }

输入方法时,我可以看到 sslPolicyErrors 设置为 RemoteCertificateNameMismatch

我已经创建了这样的服务器证书:

  1. 在服务器 1 上创建 MyCert 根 CA
  2. 请求在服务器 2 上创建并发送到服务器 1 以进行颁发的从属 CA 证书
  3. 在服务器 2 上安装已颁发的 MyCert CA(从属 CA)证书
  4. 使用 MyCert CA 从服务器 2 请求服务器 1 的函数证书
  5. 在服务器 1 上安装 MyCert Services 服务器 1 并将其绑定到服务
  6. 在客户端安装 MyCert Root CA 和 MyCert CA 并检查它是否验证了 3 的整个链。
  7. 启动客户端并连接到服务器 1 上的服务

因为 MyCert Services Server 1 的请求是在安装了它的服务器 1 上创建的,所以我不应该收到 SSL 错误,对吧?是否需要在针对服务器 1 进行验证的功能证书上设置任何属性或某些内容?

据我了解,名称不必与服务器相同?

编辑:我创建了一个新的功能证书并将 CN 设置为服务器本身的 DNS 名称。每台客户端计算机都有一个主机文件,该文件将此 CN 名称指向服务器的特定 IP。但是,我仍然在 ValidateClientCertificate 方法中遇到相同的 SSL 策略错误?证书上究竟需要什么设置才能通过验证?

【问题讨论】:

  • 检查证书的友好名称

标签: c# ssl certificate


【解决方案1】:

尝试使用您的客户端正在调用的服务器的 DNS 名称填充证书上的“主题备用名称”字段。

当客户端系统向服务器发出请求(即“https://myserver.com:443/someaction”)并且期望通用名称或主题备用名称字段中的值之一看起来像“myserver”时,会发生此错误.com”

如果这没有帮助,请尝试在您的问题中添加以下信息: - WCF 客户端调用的 URL - 服务器上证书的 Common Name 值

【讨论】:

  • 谢谢,这解决了问题!添加了一堆不同的网址。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 2016-08-21
  • 2014-07-04
  • 2018-12-26
  • 2021-03-05
  • 2013-07-13
  • 2019-05-28
相关资源
最近更新 更多