ssl 为什么我会收到RemoteCertificateNameMismatch?

vyu0f0g1  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(160)

我有以下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
1.请求在服务器2上创建并发送到服务器1以进行颁发的从属CA证书
1.在服务器2上安装已颁发的MyCert CA(下属CA)证书
1.使用MyCert CA从服务器2请求服务器1上的功能证书
1.在服务器1上安装MyCert Services Server 1并将其绑定到服务
1.在客户端上安装MyCert Root CA和MyCert CA,并检查它是否验证了整个3链。
1.启动客户端并连接到服务器1上的服务
因为MyCert Services Server 1的请求是在Server 1上创建的,它也安装在那里,所以我不应该得到SSL错误,对吗?是否有任何属性或需要在验证Server 1的功能cert上设置的东西?
据我所知,名称不一定要与服务器相同?

**编辑:**我创建了一个新的函数证书,并将CN设置为服务器本身的DNS名称。每个客户端计算机都有一个主机文件,将此CN名称指向服务器的特定IP。但我仍然在ValidateClientCertificate方法中获得相同的SSL Policy Error?证书上需要什么设置才能通过验证?

wixjitnu

wixjitnu1#

尝试使用客户端正在调用的服务器的DNS名称填充证书上的“Subject Alternative Name”字段。
当客户端系统向服务器发出请求(即“https://myserver.com:443/someaction“)时,会发生此错误,并且会期望通用名称或主题备用名称字段中的某个值看起来像“myserver.com“
如果这没有帮助,请尝试将以下信息添加到您的问题中:-WCF客户端正在调用的URL-服务器上证书的公用名称值

wmvff8tz

wmvff8tz2#

还有第二种可能。
您试图调用的服务器缺少有效的证书,或者证书是以其他名称颁发的。
例如,如果您使用负载均衡器,并且证书仅针对其名称颁发,则如果您尝试调用“底层”服务器URL而不是负载均衡URL,则会出现此错误。

相关问题