使用dotnet core 开发微信小程序api,小程序api需要使用https访问,折腾了好久,依旧没有解决。
首先申请免费证书
1.腾讯云免费证书(推荐)
第一次使用的测试服务器,证书是腾讯云申请的,部署起来非常省事,我想是因为小程序是腾讯的,兼容性好。
2.阿里云免费证书
正式服务器上申请的是阿里云的免费证书
证书对比,腾讯云的一个是crt结尾的,阿里云的是pem结尾的,部署是用nginx转发的。
配置NGINX
# HTTPS server
#
server {
listen 80 default backlog=2048;
listen 443 ssl;
server_name webapi.zsptserver.top;
ssl_certificate /usr/local/nginx/conf/certs/1523082975550.crt;
ssl_certificate_key /usr/local/nginx/conf/certs/1523082975550.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m; # shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:5000;
}
access_log /usr/local/nginx/logs/wxapi.log;
}
nginx配置比较简单,直接一个转发就可以了
发布测试
1.http可以正常访问,https访问不了?
于是关闭防火墙,确实可以访问了
2.调用小程序授权的接口报错了,是不是请求第三方https接口需要证书?
于是忽略证书校验
using (var handler = new HttpClientHandler()){
handler.ServerCertificateCustomValidationCallback = delegate { return true; };
using (var httpClient = new HttpClient(handler)){
return httpClient.GetStringAsync("http://" + self.URL + "/version").Result;
}
}
问题还是没有解决,于是开启防火墙,通过测试http访问没有问题了。
3.通过这些问题,可以说明防火墙是必须开启的,但是开启后https确无法访问,那么只有一种可能,阿里云服务器的443端口没有对外开放。