web-dev-qa-db-ja.com

luaでのhttpsリクエスト

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にアクセスしてください。

そしてサーバー側では、そのリクエストはApachessl_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を使用しても問題ありません。

14
ripat

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"
}
12
Michal Kottman

luasec を使用してluasockethttpsクライアントのサポートを追加する方法を説明している このlua-lスレッド を参照してください。

7
Doug Currie

このような

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

より現代的な解決策は、luaを使用することです-http: https://github.com/daurnimator/lua-http

Luasocket/luasec互換のインターフェースが付属しています。

1
daurnimator