【问题标题】:https request in lualua中的https请求
【发布时间】:2020-05-18 00:32:25
【问题描述】:

我正在尝试使用 lua 脚本在启用 SSL 的服务器上检索页面。需要注意的是,服务器具有自签名证书。由受信任的 CA 颁发的证书没有问题。

local https = require("socket.http")
local resp = {}
local r, c, h, s = https.request{
    url = "https://my-server:443/example.php",
    sink = ltn12.sink.table(resp),
    protocol = "tlsv1"
}

服务器返回:

错误请求 您的浏览器发送了此服务器无法理解的请求。 原因:您对启用 SSL 的服务器端口使用纯 HTTP。 请改用 HTTPS 方案访问此 URL。

在服务器端,该请求会在 Apache ssl_access.log 中生成此条目

192.168.0.150 - - [27/Nov/2011:16:32:07 +0100] "GET /" 400 529 "-" "-"

此外,tcpdump 显示在 SYN-ACK 握手之后,没有发送SSL 257 Client Hello。在我的浏览器或 wget 中使用相同的 URL 可以正常工作。

【问题讨论】:

    标签: lua luasocket


    【解决方案1】:

    正如 Doug Currie 所说,您应该使用 luasec。要启用https.request,您必须需要ssl.https 模块:

    local https = require 'ssl.https'
    local r, c, h, s = https.request{
        url = "https://my-server:443/example.php",
        sink = ltn12.sink.table(resp),
        protocol = "tlsv1"
    }
    

    【讨论】:

    • 正如我上面所说的,该 lua 脚本将在一个相当狭窄的路由器上执行,该路由器没有空间用于 LuaSec 包。我相信我必须找到解决方法。还是要谢谢你的帮助。顺便说一句,我在 LuaSec 感知框中尝试了您的 sn-p,但它似乎没有找到“ssl.https”模块。
    • 你使用的是哪个版本的 LuaSec? version 0.4.1 可在主站点上找到,其中包含应安装到 Lua 包路径中的 ssl/https.lua。
    • 4.0 版。我查看了 https.lua 模块,它似乎创建了一个模块ssl.module。为什么我不能像我在第一篇文章中尝试的那样简单地使用 https.lua 模块?我相信该模块源自 LuaSec。
    • 因为你正在导入socket.http 模块,它对HTTPS (discussion here) 一无所知。这就是您需要加载自定义模块的原因。当然,你可以把它放在你喜欢的任何地方,例如在 $LUA_PATH/socket/https.lua 中,然后你可以调用它为require 'socket.https'
    • 到 luasec 的链接已损坏。但也许this link could replace the old one
    【解决方案2】:

    参见this lua-l thread 描述如何使用luasec 添加对 luasocket https 客户端的支持。

    【讨论】:

    • 我看到了那个帖子,但我希望能找到更简单的东西。就像 LuaSec 文档中的 this example 一样。该方法适用于受信任的 CA 颁发的证书,但不适用于自签名证书。
    • 另一个坏消息是我的路由器上没有足够的内存来安装 LuaSec 包。
    【解决方案3】:

    喜欢这个

    local https = require("ssl.https")
    local one, code, headers, status = https.request{
           url = "https://www.test.com",
           key = "/root/client.key",
           certificate="/root/client.crt",
           cafile="/root/ca.crt"
    }
    

    【讨论】:

      【解决方案4】:

      更现代的解决方案是使用 lua-http:https://github.com/daurnimator/lua-http

      它带有一个 luasocket/luasec 兼容的接口。

      【讨论】:

      • 可以在windows上使用吗?
      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 2020-12-18
      • 2021-08-06
      • 2019-08-16
      • 2020-03-19
      • 2019-02-28
      • 2012-04-08
      相关资源
      最近更新 更多