【微信小程序】小程序的https整合大坑记录

  • 一、本文主要讲述以下几个问题(如无以下问题,可忽略本文)

1、微信小程序正式发布需要用https域名才可以访问。https+nginx域名配置。

2、android手机测试无问题、电脑请求无问题。真机调试时提示fail ssl hand shake error错误。

3、赛门铁克证书文件pfx转.key(私钥)和.crt证书。

4、crt 证书生成中间证书和根证书、并测试。

  • 二、前言

一时心血来潮,买了一个阿里云轻量应用服务器。然后想着做点什么,本身自己会Android、Java后端,但是,自己一个人写这么多功能,好累,而且我还缺了PC管理后台和IOS。EMM,我好像还不会写IOS。移动端大潮流已经过去了,还是不学IOS了。那做个小程序吧,小程序前端写一套,后端PC管理后台到时候再说。废话到此为止。开始心酸的小程序之路。

  • 三、正文

1、小程序要求https:意味着什么?

必须按这个顺序一步步来:购买域名(几块钱一年)——》备案(需要一个月)——》申请https证书(赛门铁克免费证书)(大概半天到一天)。

到此一个月过去了,我拥有了自己的域名、证书、服务器。

技术选型,是通过tomcat做https还是ngnix做https。基于平时tomcat服务器都是写8080端口(或者其他)。我一个https请求,还加端口号,且不说我需要在阿里云对8080端口放开安全,但是这么看起来,实在低端。我这个人,功能可以不好看,但是技术一定要用到位,那我选nginx先将所有访问80的请求都转到8080端口吧。然后在nginx上做https。

1.1、nginx服务器转发直接上nginx.conf配置(安装略)

进入配置文件目录cd /etc/nginx/,找到nginx.conf配置文件。

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  你的域名;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://你的域名:8080;
            client_max_body_size 20M;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

1.2、将nginx服务重启,用以下命令测试:

nginx -s stop 停止nginx
nginx 启动nginx
nginx -s reload 重新加载nginx
nginx -t 测试是否成功

这样就将所有域名到转发到tomcat服务器的8080端口了。但这还不行,我们要求https请求访问nginx 80 -->tomcat 8080服务。但是nginx配置文件需要配置一个证书(.crt)、一个私钥(.key)的路径。首先,我看看赛门铁克提供的证书,什么?居然是pfx。

1.3、将pfx证书转换为想要的证书(.key私钥,.crt服务器证书)

pfx是什么?看下三种证书的介绍。(概念可忽略1.3.1、1.3.2、1.3.3,操作直接看1.3.4)

1.3.1、带有私钥的证书:由Public Key Cryptography Standards #12(公钥加密技术12号标准),PKCS#12标准定义,包含了公钥和私钥的二进制形式的证书,以pfx作为证书文件的后缀名。

1.3.2、二进制编码的证书:证书中没有私钥,DER编码二进制格式的证书文件,以cer作为证书文件后缀名。

1.3.3、Base64编码的证书:证书中没有私钥,BASE64编码格式的证书文件,也是以cer作为证书文件后缀名。

1.3.4、再讲解一下.pfx证书格式转.key和.crt文件的方法:(以下以Linux系统为例)

将.pfx格式的证书转换为.pem文件格式:(有密码的话会提示密码输入)

openssl pkcs12 -in  xxx.pfx -nodes -out server.pem

从.pem文件中导出私钥server.key:
openssl rsa -in server.pem -out server.key 

从.pem文件中导出证书server.crt
openssl x509 -in server.pem -out server.crt

1.3.4、现在我已经有了server.key和server.crt了,我可以去愉快的配置nginx配置文件nginx.conf了。直接上nginx.conf。

server{
	listen       443;
	server_name  你的域名;
	ssl on;
	ssl_certificate /etc/nginx/https/server.crt;
	ssl_certificate_key /etc/nginx/https/server.key;
	ssl_session_timeout  10m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   	ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
	ssl_prefer_server_ciphers on;
	location / {
		proxy_redirect off;
            	proxy_set_header Host $host;
            	proxy_set_header X-Ssl on;
            	proxy_set_header X-Real-IP $remote_addr;
            	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           	proxy_pass http://你的域名:8080;
		client_max_body_size 20M;
        }
	}

现在再次访问https://你的域名 ------>  http://你的域名:8080了,是不是很开心,以为https搞定了。还是太天真。

测试好好的、电脑上运行的也很正常。但是!android手机真机调试,一调试就提示fail ssl hand shake error!

1.4、fail ssl hand shake error问题处理:

首先需要定位问题在哪。是TLSv1.2支持问题,还是因为证书问题。我两个都遇到了。相当幸运。送上检测工具两件。

两个检测工具:

https://www.myssl.cn/tools/check-server-cert.html

https://www.ssllabs.com/ssltest/analyze.html

1.4.1、查看nginx是否支持1.2版本(支持)、然后看配置nginx.conf配置这一行(ssl_protocols TLSv1 TLSv1.1 TLSv1.2)是否开启了tlsv1.2。这一行不这么写就说明没开。照抄上面的配置文件nginx.conf试试。

1.4.2、证书问题,我就一个0证书(服务器证书)没有中间证书。怎么处理?

去这通过现有server.crt生成中间证书、根证书。并按照服务器证书、中间证书、根证书的顺序整合到server.crt。重启nginx。

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值