C# 在C中验证SSL证书#

C# 在C中验证SSL证书#,c#,validation,ssl,certificate,C#,Validation,Ssl,Certificate,我正在从FTPS服务器下载文件,服务器会向我发送一个证书 微软表示: 如果未使用自定义验证,则将证书名与用于创建请求的主机名进行比较。例如,如果向Create(字符串)传递了参数“https://www.contoso.com/default.hmtl,默认行为是客户端根据www.contoso.com检查证书 证书未通过默认验证(RemoteCertificateNameMatch)。现在,我使用ServicePointManager.ServerCertificateValidationCa

我正在从FTPS服务器下载文件,服务器会向我发送一个证书

微软表示:

如果未使用自定义验证,则将证书名与用于创建请求的主机名进行比较。例如,如果向Create(字符串)传递了参数“https://www.contoso.com/default.hmtl,默认行为是客户端根据www.contoso.com检查证书

证书未通过默认验证(RemoteCertificateNameMatch)。现在,我使用ServicePointManager.ServerCertificateValidationCallback委托,并提供一个返回true的委托,只需“通过”即可,无需任何验证。如何使用C#验证证书


上面提到的delgate的参数之一X509Certificate包含两个感兴趣的公共属性:Issuer和Subject。这两个属性都不包含与主机名匹配的任何数据。

通常,您必须拥有正确主机名的有效证书才能通过验证,而不是覆盖回调。 您使用什么目标地址访问FTP服务器?根据你的描述,它应该与主题不同。
您可以考虑使用主题主机名来访问服务器而不是当前服务器。如果有DNS问题,您还可以设置客户端主机文件。

主机名也可以包含在证书的使用者替代名称扩展名中。