微信小程序使用https协议的WebApi后端应用服务(Win服务宿主或自承载)
![](http://www.csframework.com/images/article-type5.gif)
![微信小程序使用https协议的WebApi后端应用服务(Win服务宿主或自承载)](http://www.csframework.com/images/seo/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6.jpg)
由于最近微信小程序项目比较多,发布和部署微信小程序必须采用https协议,原http协议的WebApi接口访问不了的。直接将WebApi监听的地址修改为Https启动服务显然是不行的,必须借助证书绑定开启对应的端口才行。开始想到去申请的一个免费的证书,由于WebAPi安装在本地Windows服务中且IP地址不固定,所以免费的证书不可取,只能借助MakeCert命令自行创建证书来解决这个问题。希望给Self Hosting或Windows服务Hosting启动Https协议WebApi服务用户启示和帮助。
完整解决方案:
一、以管理员身份运行VS2015开发人员命令提示
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD.jpg)
二、生成证书,在命令窗体内执行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)】
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载1](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD1.jpg)
三、打开MMC将创建的证书导入到【受信任的颁发证书机构】中
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载2](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD2.jpg)
四、创建证书的私钥
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文件格式)
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载3](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD3.jpg)
六. 拿到该证书的指纹,获取证书指纹信息。
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载4](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD4.jpg)
七、证书绑定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端口绑定证书](http://www.csframework.com/upload/image/IP%E7%AB%AF%E5%8F%A3%E7%BB%91%E5%AE%9A%E8%AF%81%E4%B9%A6.jpg)
此工具可下载源码:
其他参考:删除证书与IP端口的绑定关系
netsh
http delete sslcert ipport=0.0.0.0:19893
一旦删除证书绑定关系或者运行netsh http add sslcert失败,无法访问webapi接口资源,如下图:
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载5](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD5.jpg)
查看端口是否已监听
运行WebApi服务器,输入命令:netstat -ano,列出所有端口的情况,可以查看端口是否已监听。
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载8](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD8.jpg)
查看端口、证书绑定状态:
netsh
http show sslcert
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载9](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD9.jpg)
八、测试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方式才出现上面的回应。
![贴图图片-WebApi框架HTTPS协议SelfHostingWin服务承载14](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWin%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD14.jpg)
使用IE浏览器,网站标识与服务器的连接已加密,https协议以及证书正常。
![贴图图片-WebApi框架HTTPS协议SelfHostingWin服务承载12](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWin%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD12.jpg)
WebAPI接口测试程序测试:
![贴图图片-WebApi框架HTTPS协议SelfHostingWin服务承载15](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWin%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD15.jpg)
九、操作错误遇到的问题归集
若执行dos命令出现以下错误,【VS2015开发人员命令提示】必须以管理员身份运行!
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载6](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD6.jpg)
若出现以下错误:
未能添加SSL证书,错误:1312,指定的登录会话不存在。可能已被终止。
解决方案:创建私钥,并导入个人证书,参考上面的步骤。
![贴图图片-WebApi框架HTTPS协议SelfHostingWindows服务承载7](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWindows%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD7.jpg)
Google Crome浏览器调试错误NET::ERR_CERT_COMMON_NAME_INVALID
此服务器无法证实它就是 localhost - 它的安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您的连接。
![贴图图片-WebApi框架HTTPS协议SelfHostingWin服务承载10](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWin%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD10.jpg)
出现上述问题的解决方案:给个人证书指定主题备用名称(友好名称)
![贴图图片-WebApi框架HTTPS协议SelfHostingWin服务承载11](http://www.csframework.com/upload/image/WebApi%E6%A1%86%E6%9E%B6HTTPS%E5%8D%8F%E8%AE%AESelfHostingWin%E6%9C%8D%E5%8A%A1%E6%89%BF%E8%BD%BD11.jpg)
技术研究以及发布文章前后花了3天时间,希望对大家有所帮助,欢迎购买C/S框架网正版WebApi框架。
<本文完>
.NET WebApi开发框架|MVC框架|后端框架|服务端框架-标准版V1.0
![适用开发](http://www.csframework.com/images/header_system.png)
![运行平台](http://www.csframework.com/images/header_platform.png)
![开发工具](http://www.csframework.com/images/header_vs.png)
![数据库](http://www.csframework.com/images/header_db.png)
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网