lua中的https请求

时间:2011-11-27 15:36:36

标签: lua luasocket

我正在尝试使用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中的相同网址即可。

4 个答案:

答案 0 :(得分:12)

正如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"
}

答案 1 :(得分:7)

请参阅this lua-l thread,了解如何使用luasec添加对luasocket https客户端的支持。

答案 2 :(得分:2)

像这样

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"
}

答案 3 :(得分:1)

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

它带有luasocket / luasec兼容接口。