原创WebApi框架:采用HTTPS协议SelfHosting,Windows服务承载WebApi服务


前言
自2017年发布CSFramework WebApi服务端开发框架以来,一直是使用http协议,默认WebApi使用http协议承载。有三种承载(Hosting或宿主)方式:IIS Hosting(IIS承载)、Self Hosting(自承载) 以及Windows Service Hosting(Win服务承载)。
由于最近微信小程序项目比较多,发布和部署微信小程序必须采用https协议,原http协议的WebApi接口访问不了的。为了解决这个问题,又开始技术探索,研究了几天,终于找到解决方案并整理成册,希望给Self Hosting或Windows服务Hosting启动Https协议WebApi服务用户启示和帮助。
PS:IIS部署HTTPS协议的WebApi服务比较简单,下载一个免费SSL证书,安装部署到IIS服务即可,这里不做介绍了。
思路和尝试
直接将WebApi监听的地址修改为Https启动服务显然是不行的,必须借助证书绑定开启对应的端口才行。开始想到去申请的一个免费的证书,由于WebAPi安装在本地Windows服务中且IP地址不固定,所以免费的证书不可取,只能借助MakeCert命令自行创建证书来解决这个问题。
关于证书的信任关系
两个服务器之间是如何利用证书来进行相互之间的信任呢?请看下图:

在如上图中,管理员通过交换双方之间的公钥中的指纹来建立二者服务器之间的信任关系。
完整解决方案:
一、以管理员身份运行VS2015开发人员命令提示

二、生成证书,在命令窗体内执行MakeCert命令
cmd:
MakeCert -sv e:\CSFrameworkWebApiCA.pvk -n "CN=localhost" e:\CSFrameworkWebApiCA.cer -b 02/12/2020 -e 12/31/2050 –r
//来源:C/S框架网(www.csframework.com) QQ:23404761
MakeCert -sv e:\CSFrameworkWebApiCA.pvk -n "CN=localhost" e:\CSFrameworkWebApiCA.cer -b 02/12/2020 -e 12/31/2050 –r
//来源:C/S框架网(www.csframework.com) QQ:23404761
【注意】:该命令最后一个-r不能缺少,-r是创建自创建证书的标识,否则当利用Pvk2pfx创建私钥时则会出现【ERROR: File not found.(Error Code = 0x80070002)】

三、打开MMC将创建的证书导入到【受信任的颁发证书机构】中

四、创建证书的私钥
cmd:
Pvk2pfx -pvk CSFrameworkWebApiCA.pvk -spc CSFrameworkWebApiCA.cer -pfx CSFrameworkWebApiCA.pfx -po test
//来源:C/S框架网(www.csframework.com) QQ:23404761
Pvk2pfx -pvk CSFrameworkWebApiCA.pvk -spc CSFrameworkWebApiCA.cer -pfx CSFrameworkWebApiCA.pfx -po test
//来源:C/S框架网(www.csframework.com) QQ:23404761
注意:-po 后面是密码,如:test
五、导入个人证书,必须选择个人信息交换(*.pfx文件格式)

六. 拿到该证书的指纹,获取证书指纹信息。

七、证书绑定ip及端口,通过如下命令进行:(这是本文最关键环节!!!)
cmd:
netsh http add sslcert ipport=0.0.0.0:19893 certhash= 93d80be8cc4cb75bff28f412fbe00f5180106e40 appid={61982502-E5D4-4794-BB01-ZDA7414480DF}
//来源:C/S框架网(www.csframework.com) QQ:23404761
netsh http add sslcert ipport=0.0.0.0:19893 certhash= 93d80be8cc4cb75bff28f412fbe00f5180106e40 appid={61982502-E5D4-4794-BB01-ZDA7414480DF}
//来源:C/S框架网(www.csframework.com) QQ:23404761
certhash参数:指定的证书的指纹。
appid参数:是一个 GUID,用于标识所属应用程序,自己生成一个GUID。
部署Self Hosting 或Windows Service Hosting 宿主的WebApi服务,通过工具操作非常方便,C/S框架网提供IP端口绑定SSL证书用于支持HTTPS协议的原创工具:

此工具可下载源码:
其他参考:删除证书与IP端口的绑定关系
netsh
http delete sslcert ipport=0.0.0.0:19893
一旦删除证书绑定关系或者运行netsh http add sslcert失败,无法访问webapi接口资源,如下图:

查看端口是否已监听
运行WebApi服务器,输入命令:netstat -ano,列出所有端口的情况,可以查看端口是否已监听。

查看端口、证书绑定状态:
netsh
http show sslcert

八、测试HTTPS协议及WebApi接口
IE浏览器测试:
启动Windows服务CSFramework.WebApi服务器,打开浏览器输入
https://localhost:19893/api/do/post
服务器回应 {"Message":"The requested resource does not support http method 'GET'."}
这是正常回应,表示WebApi服务器正常。因为api/do/post接口是HTTPOST方式才出现上面的回应。

使用IE浏览器,网站标识与服务器的连接已加密,https协议以及证书正常。

WebAPI接口测试程序测试:

九、操作错误遇到的问题归集
若执行dos命令出现以下错误,【VS2015开发人员命令提示】必须以管理员身份运行!

若出现以下错误:
未能添加SSL证书,错误:1312,指定的登录会话不存在。可能已被终止。
解决方案:创建私钥,并导入个人证书,参考上面的步骤。

Google Crome浏览器调试错误NET::ERR_CERT_COMMON_NAME_INVALID
此服务器无法证实它就是 localhost - 它的安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您的连接。

出现上述问题的解决方案:给个人证书指定主题备用名称(友好名称)

技术研究以及发布文章前后花了3天时间,希望对大家有所帮助,欢迎购买C/S框架网正版WebApi框架。
<本文完>
.NET WebApi开发框架|MVC框架|后端框架|服务端框架-标准版V1.0




版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网