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. 问题解决。但是最好的解决方案是导入信任的根证书。

  • 相关阅读:
    MongoDB 时间截取、字符串截取、拼接(时间戳、字符串等)
    ClickHouse 参数配置
    C++函数调用栈的变化分析
    WPF中为button添加快捷键(ShortCut)的方法
    vscode中一些好用的插件介绍
    剑指Offer 2. 青蛙跳台阶问题
    切片Slice的使用
    剑指Offer 1. 斐波那契数列
    match_parent和wrap_content的区别
    字节流、字符流
  • 原文地址:https://www.cnblogs.com/lionetchen/p/3824211.html
Copyright © 2011-2022 走看看