这两天在写一个打卡脚本，需要对打卡后服务端响应进行解析以便调试。四月又来了……头图来源：四月是你的谎言服务端返回的响应体是json格式，解析的时候却报错了，报错信息如下：invalid character '\x1f' looking for beginning of value这里的x1f是个转义字符。这报错信息咋一看有些摸不着头脑，于是决定从响应头入手，看看有没有有用的信息，果然，在响应头中找到这一条Content-Encoding: gzip这就表示服务端的响应体经过了gzip压缩编码，这下就好办了，使用go提供的原生库"compress/gzip"就能轻松解码。具体代码如下： gr,err:=gzip.NewReader(resp.Body) //初始化gzip reader defer gr.Close() //函数退出时关闭reader防止内存泄漏 if err!=nil{ return err } raw,_=ioutil.ReadAll(gr) //从gzip reader中读取解码后的字节流ok,完工。参考文章：解决 golang 中 invalid character ‘x1f‘ looking for beginning of value
博客在使用Cloudfare提供的cdn服务后，能够实现客户端到服务器之间的加密传输，然鹅由于在Vultr上没有ssl证书，所以仅仅是在客户端到cdn服务器上的加密传输，为了能够实现真﹒端到端加密，就需要为源服务器申请ssl证书，我在神代绮凛博客上找到了使用acme.sh脚本申请泛域名ssl证书的方法，并尝试部署一蛤。附上原文链接https://moe.best/tutorial/acme-le-wc.html和文中所采用的方法类似，我使用cloudflare提供的API添加txt记录完成验证，大体步骤文中也讲得挺详细，这里就不啰嗦了。CloudFare可以使用Global API Key或着Cloudflare API token方式添加记录暂时不知道这两者之间的区别（￣▽￣）~*，于是就选择Global API Key。关于Global API Key的获取方式，只要登陆Cloudflare账号后点击个人资料页，再选择导航栏上的API令牌选项然后选择Global API Key并查看就可以看到API密钥了，先把它复制下来。fine,看样子新版本已经将ZeroSSL作为默认的CA了，具体申请步骤如下以Cloudfare为例，大致申请步骤如下1.添加环境变量略其他解析商(cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等)的环境变量名和API用法详见https://github.com/acmesh-official/acme.sh/wiki/dnsapi2.使用邮箱注册zerossl账号将email@example.com换成你的邮箱 acme.sh --register-account -m email@example.com --server zerossl在输入命令后，还将生成你的账户指纹。（当然，如果你已经拥有zerossl账号，你同时还可以用EAB证书来注册acme账号。详见：https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA）3.生成证书将example.com替换成你的域名acme.sh --server zerossl --issue -d example.com --dns dns_cf差不多一杯茶的时间，证书就声称完毕了，此时你能看到生成证书的路径与此同时，之前添加的环境变量也写入到了account.conf文件中，如果不清楚account.conf在哪里，可以输入命令find / -name account.confcat account.conf #LOG_FILE="/root/.acme.sh/acme.sh.log" #LOG_LEVEL=1 #AUTO_UPGRADE="1" #NO_TIMESTAMP=1 UPGRADE_HASH='xxxxxxxx' #之前你所添加的环境变量被写入了这里 SAVED_CF_Key='your key' SAVED_CF_Email='your email' USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'4.安装Copy 证书不要使用默认生成的证书目录，官方给出的解释是/.acm.sh/目录下的文件都是内部使用，如果让nginx\apache的配置文件使用里面的文件，目录结构可能会发生变化。于是需要将之前生成的证书文件都copy到其他目录，当然最好是nginx\apache目录下。具体命令可见：https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A65.修改nginx配置最后别忘了修改你的web服务器配置,以nginx为例 #开启443端口 listen 443 ssl http2 default_server; #ssl on; ssl_certificate "cer.pem's path you set at step 4"; ssl_certificate_key "key.pem's path you set at step4"; #客户端可重用会话缓存中ssl参数的过期时间 ssl_session_timeout 10m; #制定启动的加密协议 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #选择加密的套件（不同浏览器支持的加密套件或顺序可能不相同） ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #开启时则在协商加密算法时，优先选择服务端的加密算法而不是客户端 ssl_prefer_server_ciphers on;以上参数的含义具体参考https://blog.csdn.net/mr_raptor/article/details/51854746在修改完配置文件并重启你的服务器后，此时使用netstat -ntpl|grep 443命令应该可以看到443端口已经被打开了此时再将我们Cloudflare的SSL/TLS加密方式设置为完全（也可以设置为严格）OK！现在就能实现端到端加密啦。[scode type="green"]泛域名证书的有效期为三个月，而acme.sh会贴心地每隔60天自动续期，[/scode]