Https запрос в lua

Я пытаюсь получить страницу на моем сервере с поддержкой SSL с помощью lua script. Важно отметить, что сервер имеет самозаверяющий сертификат. Нет проблем с сертификатом, выданным доверенным ЦС.

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

Сервер возвращает:

Плохой запрос Ваш браузер отправил запрос, который этот сервер не мог понять. Причина. Вы говорите простой HTTP на сервер с поддержкой SSL. Вместо этого используйте схему 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. Использование одного и того же URL из моего браузера или с помощью wget работает нормально.

Ответ 1

Как сказал Дуг Керри, вы должны использовать 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"
}

Ответ 2

См. этот поток lua-l, описывающий, как добавить поддержку для клиента https luasocket, используя 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 интерфейсом.