WCF分布式开发常见错误(24):the SSL/TLS secure channel with authority

简介:
  使用传输安全模式,证书建立SSL,宿主端口证书配置完毕,但是客户调用服务出错。
【1】错误信息:
Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.
不能和授权计算机为 SSL/TLS 安全通道建立信任关系.
WCF中文论坛问题连接: http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/1591a00d-d431-4ad8-bbd5-34950c39d563
错误截图:
【2】配置信息:
   2.1服务端配置:
   服务端设置证书,不采用客户端安全认证。安全方式是传输安全。服务端配置信息如下:
< services >
      
< service behaviorConfiguration = " WCFService.WCFServiceBehavior "  name = " WCFService.WCFService "   >
        
< endpoint 
          address
= " WCFService "  
          binding
= " wsHttpBinding "  
          bindingConfiguration
= " BasicWithTransport "
          contract
= " WCFService.IWCFService " >
        
</ endpoint >
        
< endpoint address = " mex "  binding = " mexHttpsBinding "  contract = " IMetadataExchange "   />
        
< host >
          
< baseAddresses >
            
< add baseAddress = " https://computer:9001/ " />
          
</ baseAddresses >
        
</ host >
      
</ service >
    
</ services >
    
< behaviors >
      
< serviceBehaviors >
        
< behavior name = " WCFService.WCFServiceBehavior " >
          
< serviceMetadata httpsGetEnabled = " true "   />
          
< serviceDebug includeExceptionDetailInFaults = " false "   />
          
< serviceCredentials >
              
< serviceCertificate  storeName = " My "   x509FindType = " FindBySubjectName "  findValue = " WCFHTTPS "  storeLocation = " LocalMachine " />
          
</ serviceCredentials >
        
</ behavior >
      
</ serviceBehaviors >
    
</ behaviors >
    
< bindings >
    
< wsHttpBinding >
      
< binding name = " BasicWithTransport " >
        
< security mode = " Transport " >
          
< transport clientCredentialType = " None " />
        
</ security >
      
</ binding >
    
</ wsHttpBinding >
    
</ bindings >
    2.2客户端配置:
    客户端添加服务引用后,直接实例化类调用WCF服务,结果就出现不能为SSL建立信任关系错误。

                WCFClient.ClientProxy.WCFServiceClient wcfServiceProxyHttp 
=   new  WCFClient.ClientProxy.WCFServiceClient( " WSHttpBinding_IWCFService " );
                
// 通过代理调用SayHello服务
                   string  sName  =   " Frank Xu Lei WSHttpBinding " ;
                
string  sResult  =   string .Empty;

                sResult 
=  wcfServiceProxyHttp.SayHello(sName);
【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
    【5】总结:
      对Windows Server服务器产品开发部署WCF服务的时候才采用的第二种机制。需要授权的证书机构颁发的证书。对于普通的学习第一种方式就可以了。
     WCF安全开发编程实践,是一个比较复杂的过程,除了需要掌握基本的安全知识以外,要需要熟练运用各种证书制作,安装、SSL证书httpcfg.配置等工具。在Windows Server2003,Vitsa系统下差别还很大,普通的XP系统下开发学习更是需要安装一写服务,而且调试过程也比较繁琐,一旦有点配置不对,就会出现异常。需要耐心去学习。
   
参考资料:
1. http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/bb0fc194-5bf3-4c24-94bb-c86f94c76bc2
2. http://www.codemeit.com/wcf/wcf-could-not-establish-trust-relationship-for-the-ssltls-secure-channel-with-authority.html


 本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/320957,如需转载请自行联系原作者


相关文章
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
453 5
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
10月前
|
安全 算法 网络安全
SSL/TLS协议如何确保HTTP通信的安全
通过这些机制和过程,SSL/TLS对HTTP通信提供了强大的保护,确保数据不被未授权的第三方访问或篡改,这对维护数据隐私和网络安全至关重要。随着互联网技术的不断进步,SSL/TLS协议本身也在不断更新和升级,以对抗新出现的威胁和满足现代网络的要求。
443 10
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
767 6
|
12月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
849 10
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
1155 35
|
数据管理 API 调度
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
HarmonyOS Next 是华为新一代操作系统,专注于分布式技术的深度应用与生态融合。本文通过技术特点、应用场景及实战案例,全面解析其核心技术架构与开发流程。重点介绍分布式软总线2.0、数据管理、任务调度等升级特性,并提供基于 ArkTS 的原生开发支持。通过开发跨设备协同音乐播放应用,展示分布式能力的实际应用,涵盖项目配置、主界面设计、分布式服务实现及部署调试步骤。此外,深入分析分布式数据同步原理、任务调度优化及常见问题解决方案,帮助开发者掌握 HarmonyOS Next 的核心技术和实战技巧。
1834 76
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
859 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
|
消息中间件 缓存 算法
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
1511 0
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
|
安全 算法 网络安全
SSL/TLS协议是什么?
SSL/TLS协议是什么?
2052 57