WCF作为.net三大组件之一,伟大之处不用多说,但是其加密配置对于我这样的萌新来说还是颇有难度,因此将几天来的研究成果共享出来,与各位共勉~

  首先声明我的开发环境,Win10创意者更新 + Visual Studio 2015 update3 + .Net 4.5 + iis10

  一、创建X.509证书

    1、创建证书

    可通过PowerShell或者makecert工具两种方式,个人建议使用参考资料更多后者,但最新的Windows和VS都不带makecert,所以需要的话可以到文章结尾处下载

    使用CMD运行: 

makecert -sr CurrentUser -ss My -n CN=HelloServiceClient -sky exchange -pe -r

    提示Succeded即创建完成。

    此时将在当前用户下的个人项目中看到这个证书,图中MMC管理单元的使用可以参考这里

    WCF加密操作(包括证书和证书+帐号密码)

    2、设置为信任

    由于创建的证书在个人域,且不在信任链中,wcf和iis目前不能使用这个证书,一次需要将其设置为信任。

    首先先将其导出到磁盘:证书上右键--所有任务--导出--选择导出私钥--设置私钥密码,完成后将得到一个pfx文件。

    然后进入上图的本地计算机,在个人域导入刚才那个pfx文件,完成后双击证书,在“证书路径”标签中提示“由于CA 根证书不在“受信任的根证书颁发机构”存储区中,所以它不受信任。”,此时证书仍然不能被使用,我的做法是在本地计算机的“受信任的根证书颁发机构”重复导入一次。此时两个证书都变成可信,即使将第二次导入的删除也没关系。

    以上做完没问题的话,双击证书后的状态应该是这样的:

    WCF加密操作(包括证书和证书+帐号密码)

  二、通过证书加密的项目

    1、创建wcf服务

      VS中新建“WCF服务应用程序”的项目,命名为WCF_HelloService,此时不用任何修改,已经是可运行的wcf服务,然后将其部署到iis,在浏览器中可使用http访问到服务信息:

WCF加密操作(包括证书和证书+帐号密码)

      并重写Service1.scv.cs中的GetData()方法:

        public string GetData(int value)
        {
            if (ServiceSecurityContext.Current != null)
            {
                if (!ServiceSecurityContext.Current.IsAnonymous)
                {
                    return "Hello:" + ServiceSecurityContext.Current.PrimaryIdentity.Name + ";type=" + ServiceSecurityContext.Current.PrimaryIdentity.AuthenticationType;
                }
                return "Hello,你输入的是:" + value;
            }
            return "Hello ||未检测到证书:" + value;
        }
View Code

相关文章:

  • 2022-12-23
  • 2021-09-14
  • 2021-05-21
  • 2021-12-10
  • 2021-05-04
  • 2021-07-25
  • 2021-08-21
猜你喜欢
  • 2021-09-20
  • 2021-11-16
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2021-04-11
  • 2022-12-23
相关资源
相似解决方案