16

我正在尝试使用 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 可以正常工作。

4

4 回答 4

14

正如 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"
}
于 2011-11-27T21:18:02.227 回答
7

请参阅此 lua-l 线程,描述如何使用luasec添加对 luasocket https 客户端的支持。

于 2011-11-27T16:46:04.907 回答
4

像这样

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"
}
于 2015-07-17T07:14:47.493 回答
1

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

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

于 2016-07-23T00:14:54.777 回答