2011-11-27 20 views
11

Estoy intentando recuperar una página en mi servidor habilitado para SSL con un script lua. Es importante tener en cuenta que el servidor tiene un certificado autofirmado. No hay problema con el certificado emitido por una CA confiable.Solicitud de https en lua

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

el servidor devuelve:

Solicitud incorrecta Su navegador envían una petición que este servidor no podía comprender. Motivo: Habla un HTTP simple a un puerto de servidor habilitado para SSL. En su lugar, use el esquema HTTPS para acceder a esta URL, por favor.

Y en el lado del servidor, esa solicitud producir esta entrada en el Apache ssl_access.log

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

Además, tcpdump muestra que después de la toma de contacto SYN-ACK, no se envía ninguna SSL 257 Client Hello. Usar la misma URL desde mi navegador o con wget funciona bien.

Respuesta

7

Consulte this lua-l thread que describe cómo agregar compatibilidad con el cliente de https luasocket usando luasec.

+0

Vi ese hilo pero esperaba encontrar algo más simple. Como en [este ejemplo] (http://www.inf.puc-rio.br/~brunoos/luasec/reference.html#request) de la documentación de LuaSec. Ese método funciona bien con certificados emitidos por CA de confianza, pero no en certificados autofirmados. – ripat

+1

Otra mala noticia es que no tengo suficiente memoria en mi enrutador para instalar el paquete LuaSec. – ripat

11

Como dijo Doug Currie, debería usar luasec. A fin de que https.request, tiene que requerir el módulo 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" 
} 
+0

Como dije anteriormente, esa secuencia de comandos lua se ejecutará en un enrutador bastante pequeño que no tiene espacio para el paquete LuaSec. Creo que tendré que encontrar una solución. Gracias por tu ayuda de todos modos. Y, por cierto, intenté su fragmento en un cuadro de LuaSec aware y no parece encontrar el módulo 'ssl.https'. – ripat

+0

¿Qué versión de LuaSec usaste? La [versión 0.4.1] (http://www.inf.puc-rio.br/~brunoos/luasec/download/luasec-0.4.1.tar.gz), que está disponible en el sitio principal, contiene ssl /https.lua que debe instalarse en la ruta del paquete Lua. –

+0

Versión 4.0. Eché un vistazo al módulo https.lua y parece crear un módulo 'ssl.module'. ¿Por qué no puedo simplemente usar el módulo https.lua como traté de hacer en mi primera publicación? Ese módulo se deriva de LuaSec, creo. – ripat

2

como esto

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