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 интерфейсом.