WCF 定制自己的签名验证逻辑

关键点:

1. 保证在客户端设置签名。

client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, certName);

2. 编写自己的validator,继承 X509CertificateValidator

public class MyX509CertificateValidator : X509CertificateValidator
{
    string allowedIssuerName;

    public MyX509CertificateValidator(string allowedIssuerName)
    {
        if (allowedIssuerName == null)
        {
            throw new ArgumentNullException("allowedIssuerName");
        }

        this.allowedIssuerName = allowedIssuerName;
    }

    public override void Validate(X509Certificate2 certificate)
    {
        // Check that there is a certificate.
        if (certificate == null)
        {
            throw new ArgumentNullException("certificate");
        }

        // Check that the certificate issuer matches the configured issuer.
        if (allowedIssuerName != certificate.IssuerName.Name)
        {
            throw new SecurityTokenValidationException
              ("Certificate was not issued by a trusted issuer");
        }
    }
}

3. 在server端,将自己编写的validator嵌入servicehost之中

           using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
            {
                serviceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
                    X509CertificateValidationMode.Custom;
                serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidator =
                    new MyX509CertificateValidator("CN=Contoso.com");

                serviceHost.Open();
                Console.WriteLine("Service started, press ENTER to stop ...");
                Console.ReadLine();

                serviceHost.Close();
            }

最后附上MSDN的官方说明(原文出处)https://msdn.microsoft.com/en-us/library/ms733806(v=vs.110).aspx
时间: 2024-10-22 20:28:07

WCF 定制自己的签名验证逻辑的相关文章

WCF MSDN文章

工作流服务 介绍如何创建和配置工作流服务. 终结点:地址.绑定和协定 介绍如何控制服务的多个方面. 数据传输和序列化 介绍如何针对互操作或将来的兼容性对数据的序列化进行调整. 会话.实例化和并发 介绍 WCF 的实例和会话模式以及如何为应用程序选择正确的模式. Windows Communication Foundation 中的传输 介绍如何配置传输层,即通道堆栈的最低级别. 队列和可靠会话 介绍队列,队列代表接收应用程序存储来自发送应用程序的消息,之后将这些消息转发给接收应用程序. WCF

Android逆向之旅---带你爆破一款应用的签名验证问题

一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是会做的,一般现在就两种方式: 第一种:签名校验不通过直接退出程序,也就是你会发现回编译二次打包运行失败的现象 第二种:签名校验不通过不触发程序指定逻辑,导致没有错误信息,也进不了应用的现象 关于Android中应用防护策略的文章可以看这里:Android中应用的攻防之战 今天我们就来看一下签名校验的

android 签名验证防止重打包

网上资料很多,这里只做一个笔记反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包. 1 java 代码中验证签名 用 PackageManager 获取签名信息 public static int getSignature(Context context) { PackageManager pm = context.getPackageManager(); PackageInfo pi;

教你写一个可快速复用定制的小键盘输入控件

引子 在Android项目开发中特别是一些稍大型的项目,面对需求文档的时候你经常会发现很多地方用到了同样的组件,但是又略有不同.比如这个: 右边是一个小键盘输入板,左边当焦点不同的时候分别用右边的小键盘输入板来输入内容,同时发现很多别的地方也用到了这个小键盘输入板. 按照以往的做法,我们可能这样子来做出这么一个控件: 写一个小键盘的布局单独存为一个layout文件 在用到这个小键盘的activity/fragment中的layout布局中include这个小键盘布局文件 在activity/fr

android黑科技系列——爆破一款应用的签名验证问题

一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是会做的,一般现在就两种方式: 第一种:签名校验不通过直接退出程序,也就是你会发现回编译二次打包运行失败的现象 第二种:签名校验不通过不触发程序指定逻辑,导致没有错误信息,也进不了应用的现象 关于Android中应用防护策略的文章可以看这里:Android中应用的攻防之战 今天我们就来看一下签名校验的

【设计模式】六大原则总结

一.『Single Responsibility Principle』单一职责原则 单一职责原则的核心精神是:一个类,或者一个接口,最好只做一件事情,当发生变化时,他只能受到单一的影响:因为职责过多,可能引起变化的原因将会很多,这样导致职责和功能上的依赖,将严重影响其内聚性和耦合度,混乱由此而生. 单一职责的原则在现实生活中早就实践于现代公司体制与工业生产上,如公司的各个部门职责分明相互独立,生产流水线的某一环节只需关注上螺丝,而另一环节只做零件组装等等:这一原则使庞大的系统组合起来还能各司其职

BeanFactory与FactoryBean

1. BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是Spring IOC 所遵守的最底层和最基本的编程规范.在  Spring 代码中, BeanFactory 只是个接口,并不是 IOC容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactory . XmlBeanFactory .ApplicationContext 等,都是附加了某种功能的实现. 以下

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

9 异常处理 操作系统 进程线程 队列+生产消费者模型 进程同步 回调函数

异常处理 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常的种类: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError 无法引入模块或包:基本上是路径问题或名称错误 IndentationError 语法错误(的子类) :代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访