zoukankan      html  css  js  c++  java
  • [C# | WinCE | Solution] 在 WinCE 上访问 SSL 加密后的 WCF SOAP 服务接口出现“未能与远程服务器建立信任关系”

    Scenario: 服务器的 SOAP 使用了 GeoTrust 签名的 EV 证书,WinCE调用时出现“未能与远程服务器建立信任关系”的错误。原因是该 WinCE 设备信任的证书包括 GlobalSign, Thawte 等,但是不包括 GeoTrust.

    Cause: 当 WinCE 中没有信任的根证书时,自签名证书,或者即使是经过第三方 CA 签名的证书,均无法通过认证。

    Solution: 最好的方法是导入信任的根证书。若无法做到,则需要在程序里令 WinCE 绕过验证机制。

    Key tool: 实现证书验证策略的系统静态类 System.Net.ServicePointManager.CertificatePolicy

    1. 定义证书策略类,实现证书策略接口

            public class TrustCertificatePolicy : ICertificatePolicy
            {
                public bool CheckValidationResult(ServicePoint sp, X509Certificate cert, WebRequest req, int problem)
                {
                    if (/* 此处加入语句,判断 cert 证书是否可以信任*/)
                        return true;
                    else
                        return false;    
                }
            }

    2. 主程序或主窗口加载时,向 System.Net.ServicePointManager.CertificatePolicy(静态类) 注册该策略,例如:

            private void frmMain_Load(object sender, EventArgs e)
            {
                System.Net.ServicePointManager.CertificatePolicy = new TrustCertificatePolicy();
            }

    3. 问题解决。但是最好的解决方案是导入信任的根证书。

  • 相关阅读:
    EA教程 (四) SQLHelper类
    详解包含、扩展和泛化
    几种常用的单例模式详解
    我的分层
    EA教程(二)数据库
    软件版本号如何定义
    精解PV操作之信号量
    eclipse连接数据库驱动汇总
    [Leetcode 17] 13 Roman to Integer
    Short term goal for 2013 rest time
  • 原文地址:https://www.cnblogs.com/lionetchen/p/3824211.html
Copyright © 2011-2022 走看看