none
不能和授权计算机为 SSL/TLS 安全通道建立信任关系:Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'., RRS feed

  • 问题

  • 使用传输安全模式,证书建立SSL,宿主端口证书配置完毕,但是客户调用服务出错。

    Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.
    不能和授权计算机为 SSL/TLS 安全通道建立信任关系
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月8日 11:23
    版主

答案

  • 已经解决:WCF分布式开发常见错误(24):Could not establish trust relationship for the SSL/TLS secure channel with authority

    【3】问题分析:
           Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.
    不能和授权计算机为 SSL/TLS 安全通道建立信任关系.
           实际原因和证书有很大关系,这里证书是跟证书颁发机构信任的证书,在客户端和服务端建立安全会话的时候,无法信任此证书。
        另外一个可能的原因是你其他域里也使用此一个证,这个也有可能导致错误。
    【4】解决办法:
        3.1:定义一个类,来对远程X.509证书的验证,进行处理,返回为true.我们要自己定义一个类,然后在客户单调用WCF服务之前,执行一次即可。代码如下:

     public static class Util
        {
            
    /// <summary>
            
    /// Sets the cert policy.
            
    /// </summary>
            public static void SetCertificatePolicy()
            {
                ServicePointManager.ServerCertificateValidationCallback
                           
    += RemoteCertificateValidate;
            }

            
    /// <summary>
            
    /// Remotes the certificate validate.
            
    /// </summary>
            private static bool RemoteCertificateValidate(
               
    object sender, X509Certificate cert,
                X509Chain chain, SslPolicyErrors error)
            {
                
    // trust any certificate!!!
                System.Console.WriteLine("Warning, trust any certificate");
                
    return true;
            }
        }

         你要在调用操作点先调用这个方法: Util.SetCertificatePolicy();
                    sResult = wcfServiceProxyHttp.SayHello(sName);
        3.2:就是需要你在客户端和服务端各安装一个跟证书授权机构。然后制作一受信任的根证书机构的证书。可以参考这个:
    http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Create%20and%20Install%20Temporary%20Certificates%20in%20WCF%20for%20Message%20Security%20During%20Development&referringTitle=How%20Tos
        


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月10日 1:07
    版主

全部回复

  • 已经解决:WCF分布式开发常见错误(24):Could not establish trust relationship for the SSL/TLS secure channel with authority

    【3】问题分析:
           Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.
    不能和授权计算机为 SSL/TLS 安全通道建立信任关系.
           实际原因和证书有很大关系,这里证书是跟证书颁发机构信任的证书,在客户端和服务端建立安全会话的时候,无法信任此证书。
        另外一个可能的原因是你其他域里也使用此一个证,这个也有可能导致错误。
    【4】解决办法:
        3.1:定义一个类,来对远程X.509证书的验证,进行处理,返回为true.我们要自己定义一个类,然后在客户单调用WCF服务之前,执行一次即可。代码如下:

     public static class Util
        {
            
    /// <summary>
            
    /// Sets the cert policy.
            
    /// </summary>
            public static void SetCertificatePolicy()
            {
                ServicePointManager.ServerCertificateValidationCallback
                           
    += RemoteCertificateValidate;
            }

            
    /// <summary>
            
    /// Remotes the certificate validate.
            
    /// </summary>
            private static bool RemoteCertificateValidate(
               
    object sender, X509Certificate cert,
                X509Chain chain, SslPolicyErrors error)
            {
                
    // trust any certificate!!!
                System.Console.WriteLine("Warning, trust any certificate");
                
    return true;
            }
        }

         你要在调用操作点先调用这个方法: Util.SetCertificatePolicy();
                    sResult = wcfServiceProxyHttp.SayHello(sName);
        3.2:就是需要你在客户端和服务端各安装一个跟证书授权机构。然后制作一受信任的根证书机构的证书。可以参考这个:
    http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Create%20and%20Install%20Temporary%20Certificates%20in%20WCF%20for%20Message%20Security%20During%20Development&referringTitle=How%20Tos
        


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月10日 1:07
    版主
  • 及时雨啊!受益匪浅!
    2009年11月16日 7:53
  • anyway,这样是可以绕过验证 达到访问的目的。但是这样做的话 是不是安全证书根本没起到作用?有什么办法使证书是可以被信任的呢?是不是一定要是第三方信任机构颁发的证书 而自己制作的证书不可以呢?
    2010年10月2日 8:28