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管理单元的使用可以参考这里。
2、设置为信任
由于创建的证书在个人域,且不在信任链中,wcf和iis目前不能使用这个证书,一次需要将其设置为信任。
首先先将其导出到磁盘:证书上右键--所有任务--导出--选择导出私钥--设置私钥密码,完成后将得到一个pfx文件。
然后进入上图的本地计算机,在个人域导入刚才那个pfx文件,完成后双击证书,在“证书路径”标签中提示“由于CA 根证书不在“受信任的根证书颁发机构”存储区中,所以它不受信任。”,此时证书仍然不能被使用,我的做法是在本地计算机的“受信任的根证书颁发机构”重复导入一次。此时两个证书都变成可信,即使将第二次导入的删除也没关系。
以上做完没问题的话,双击证书后的状态应该是这样的:
二、通过证书加密的项目
1、创建wcf服务
VS中新建“WCF服务应用程序”的项目,命名为WCF_HelloService,此时不用任何修改,已经是可运行的wcf服务,然后将其部署到iis,在浏览器中可使用http访问到服务信息:
并重写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; }