java发送https请求_避坑!OpenResty发送https请求

3170ffee9ebf39d2528e9c4aeff4aa03.png

一开始觉得这个问题挺简单的,就是和http请求一样,无非就是把http改成https, 所以也是这么做的,然后发现,太草率了~

事情没那么简单,应该也算是被Python好用的体系给带节奏了,对一些类库细节没有做过多的了解。

这次在OpenResty里用的是resty/http的库,按照正常情况下做请求,如下

local zhttp = require "resty.http"local msg_httpc = zhttp.new()msg_httpc:request_uri("https://www.xxxx.com/cgi-bin/gettoken?xxxx", {              method = "GET",              headers = {                  ["User-Agent"] = "qyweixin",                                      }            })

然而报错了! OMG

unable to get local issuer certificate

HTTPS相比于HTTP多了一层SSL/TSL,是加密传输的(http是明文传输),加密过程中使用了三种加密手段,分别是证书,对称加密和非对称加密。

552d62a4da205abc58c308101981f3df.png

完整的一次https请求的流程

df671df1b6ce87b32ce68499651ebbd6.png

知道了整体的流程,补充起流程中缺失的内容,让流程完整起来,就好了

  • 解决方法:

在nginx.conf里加入如下配置

    lua_ssl_verify_depth 10;    # ubuntu server    # lua_ssl_trusted_certificate '/etc/ssl/certs/ca-certificates.crt';    #mac    lua_ssl_trusted_certificate '/etc/ssl/cert.pem';

加入之后,就可以正常来做请求了,条件就都满足了, 验证下来也确实可以请求成功了。

其中,lua_ssl_trusted_certificate的值怎么获取呢?*inux系统,可以通过

curl -v -s -l 'https://www.xxxx.com/cgi-bin/gettoken?xxxx' ,然后就知道使用哪个证书了

信息如下:

00f62b544f2fb237961b52cc34d04050.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值