使用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端口没有对外开放。