https request in lua

43,687

Solution 1

As Doug Currie said, you should use luasec. In order to enable https.request, you have to require the ssl.https module:

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

Solution 2

See this lua-l thread describing how to add support for luasocket https client using luasec.

Solution 3

like this

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

Solution 4

A more modern solution is to use lua-http: https://github.com/daurnimator/lua-http

It comes with a luasocket/luasec compatible interface.

Share:
43,687
ripat
Author by

ripat

Airline pilot by day and night. Linux enthusiast the rest of the time. "Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?"

Updated on May 15, 2020

Comments

  • ripat
    ripat almost 4 years

    I am trying to retrieve a page on my SSL enabled server with a lua script. Important to note that the server has a self-signed certificate. No problem with certificate issued by a trusted 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"
    }
    

    The server returns:

    Bad Request Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to access this URL, please.

    And on the server side, that request produce this entry in the Apache ssl_access.log

    192.168.0.150 - - [27/Nov/2011:16:32:07 +0100] "GET /" 400 529 "-" "-"
    

    Furthermore, tcpdump shows that after the SYN-ACK handshake, no SSL 257 Client Hello is sent. Using the same URL from my browser or with wget works ok.