2011-11-27 35 views
11

Tôi đang cố gắng truy xuất trang trên máy chủ hỗ trợ SSL của tôi bằng tập lệnh lua. Quan trọng cần lưu ý là máy chủ có chứng chỉ tự ký. Không có vấn đề với chứng chỉ được cấp bởi CA đáng tin cậy.https trong 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" 
} 

Lợi nhuận server:

Bad Request Trình duyệt của bạn gửi một yêu cầu mà máy chủ này không thể hiểu được. Lý do: Bạn đang nói HTTP thuần tuý với cổng máy chủ hỗ trợ SSL. Thay vào đó, hãy sử dụng lược đồ HTTPS để truy cập URL này.

Và ở phía máy chủ, yêu cầu sản xuất cụm từ này trong Apache ssl_access.log

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

Hơn nữa, tcpdump cho thấy rằng sau khi bắt tay SYN-ACK, không SSL 257 Client Hello được gửi đi. Sử dụng cùng một URL từ trình duyệt của tôi hoặc với công việc wget ok.

Trả lời

7

Xem this lua-l thread mô tả cách thêm hỗ trợ cho khách hàng https luasocket sử dụng luasec.

+0

Tôi đã thấy chuỗi đó nhưng tôi đã hy vọng tìm được thứ gì đó đơn giản hơn. Giống như trong [ví dụ này] (http://www.inf.puc-rio.br/~brunoos/luasec/reference.html#request) từ tài liệu LuaSec. Phương thức đó hoạt động tốt với các chứng chỉ do CA đáng tin cậy chứ không phải trên các chứng chỉ tự ký. – ripat

+1

Một tin xấu nữa là tôi không có đủ bộ nhớ trên bộ định tuyến để cài đặt gói LuaSec. – ripat

11

Như Doug Currie đã nói, bạn nên sử dụng luasec. Để kích hoạt https.request, bạn phải yêu cầu ssl.https mô-đun:

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

Như tôi đã nói ở trên, tập lệnh lua sẽ được thực hiện trên một bộ định tuyến khá chật chội mà không còn chỗ cho gói LuaSec. Tôi tin rằng tôi sẽ phải tìm cách giải quyết. Cảm ơn sự giúp đỡ của bạn anyway. Và BTW tôi đã thử đoạn trích của bạn trong hộp nhận thức LuaSec và dường như nó không tìm thấy mô-đun 'ssl.https'. – ripat

+0

Bạn đã sử dụng phiên bản LuaSec nào? [Phiên bản 0.4.1] (http://www.inf.puc-rio.br/~brunoos/luasec/download/luasec-0.4.1.tar.gz), có sẵn trên trang chính, chứa ssl /https.lua cần được cài đặt vào đường dẫn gói Lua. –

+0

Phiên bản 4.0. Tôi đã có một cái nhìn vào mô-đun https.lua và có vẻ như để tạo ra một mô-đun 'ssl.module'. Tại sao tôi không thể sử dụng mô-đun https.lua như tôi đã cố gắng thực hiện trong bài đăng đầu tiên của mình? Mô-đun đó bắt nguồn từ LuaSec mà tôi tin. – ripat

2

như thế này

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