默认证书验证程序

时间:2013-09-09 06:31:03

标签: .net wcf security ssl certificate

有人可以给出描述或(更优选)对.NET框架如何验证域证书的引用吗?

我正在尝试连接到使用带有证书传输安全性的BasicHttpBinding配置的WCF服务。服务在机器1上,服务器在机器2上。两台机器都连接到域。服务证书由域的证书颁发机构颁发。但是,当客户端(在我的情况下是Visual Studio添加服务引用向导)正在与服务协商时,它会弹出一条警告消息,其中有三个可能的原因导致证书不受信任:

  1. 公司颁发的安全证书不在不信任列表中。它可能是值得信赖的。
  2. 安全证书日期有效。
  3. 主机“管理员”的安全证书与您要查看的页面名称不匹配。 (警告!!)
  4. 但我问的是原因1,为什么?

    另一方面,如果我使用WcfTestClient,则会弹出以下错误:

    URI: https://ip:port/svc   
         Metadata contains a reference that cannot be resolved: 'https://ip:port/svc'.   
         Could not establish trust relationship for the SSL/TLS secure channel with authority 'ip:port'.   
         The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.   
         The remote certificate is invalid according to the validation procedure.HTTP GET Error.
    
    URI: https://ip:port/svc   
        There was an error downloading 'https://ip:port/svc'.   
        The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.   
        The remote certificate is invalid according to the validation procedure.
    

    有人可以告诉我这里发生了什么吗?如何验证服务证书?请不要告诉我写一个PermissivePolicy来覆盖默认程序?

1 个答案:

答案 0 :(得分:1)

你在这里打了两张支票:

  1. 证书“subject”或“alternate name”字段必须与主机名
  2. 匹配
  3. 证书的颁发者(或原始证书,如果它是自签名的)必须添加到客户端计算机上的“Root”证书存储区
  4. 修复此错误很简单 - 只需使用正确的主机名重新颁发证书,并将所需的部分添加到对等的“根”存储中。