by 好大一小白
2017.7.14 13:10
使用基于IIS的WCF,想使用HTTPS只需要在IIS中配置即可,但是如果是自承载方式的WCF,该怎么配置呢?
1、申请证书
一般如果使用CA认证的证书即可,目前阿里云,腾讯云都支持申请免费的CA证书。
如果是开发阶段,或不想申请,可以使用makecert生成自签名证书。
makecert在VS的本机工具命令提示中可以只用,或直接全盘搜索makecert.exe,可以绿色拷贝出来。
生成证书命令:makecert -sr localmachine -ss My -n "CN=TestCert" -sky exchange -pe -r
注意红色加粗部分,需要是Localmachine,如果是currentuser,在后面的命令会提示错误信息。(以上命令管理员权限操作)。
命令成功后即可在证书查看中找到相关证书了。
在 MMC 管理单元中查看证书
-
-
键入 mmc 然后按 Enter 键。请注意,若要查看本地计算机存储中的证书,您必须具有管理员角色。
-
-
-
-
-
在“证书”管理单元对话框中,选择“计算机帐户”,然后单击 “下一步”。也可以选择“我的用户帐户”或“服务帐户”。如果您不是计算机的管理员,则您只能管理您的用户帐户的证书。
-
-
-
-
在“控制台根节点”窗口中,单击“证书(本地计算机)”查看计算机的证书存储。
-
可选。若要查看您的帐户证书,请重复步骤 3 到步骤 6。在步骤 7 中,单击“我的用户帐户”而不选择“计算机帐户”,然后重复步骤 8 到步骤 10。
-
可选。在“文件”菜单上单击“保存”或“另存为”。保存控制台文件供以后重复使用。
您也可以通过使用 Internet Explorer 来查看、导出、导入和删除证书。
使用 Internet Explorer 查看证书
-
在 Internet Explorer 中,单击“工具”,然后单击“Internet 选项”以显示“Internet 选项”对话框。
-
-
-
若要查看任何证书的详细信息,请选择该证书,然后单击“查看”。
2、启动自承载WCF服务
修改WCF服务部分代码,使其支持HTTPS
WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
ServiceEndpoint svEndpiont = host.AddServiceEndpoint(typeof(WcfService.IService1), b, "Service");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpsGetEnabled = true;
behavior.HttpsGetUrl = new Uri(https://IP:端口/Service.svc/metadata
host.Description.Behaviors.Add(behavior);
然后启动ServiceHost host实例,
注意,host要全局,否则局部变量会被关闭的
3、使用netsh命令,绑定端口和证书
http add sslcert ipport=0.0.0.0:端口 certhash=证书Hash值去掉空格 appid={应用的GUID}
证书Hash值去掉空格可以在证书详情中查看,此处端口与代码中端口一致
或使用如下代码获取:
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
byte[] thumbprint = sha1.ComputeHash(File.ReadAllBytes("证书文件路径"));
}
转成字符串小写即可。
命令执行成功后,即可使用浏览器HTTPS访问服务地址查看了,
由于是自签名证书,所以会提示不安全链接。