2010-09-12 4 views
34

Như tiêu đề cho biết, Google không cung cấp bất kỳ điều gì hữu ích liên quan đến điều này.Làm cách nào để Sinatra hoạt động qua HTTPS/SSL?

Làm cách nào để thiết lập và định cấu hình HTTPS/SSL cho ứng dụng Sinatra?

Làm cách nào để tạo tuyến đường HTTPS?

Tôi chưa bao giờ sử dụng HTTPS cho ứng dụng của mình trước đây và không có tinh chỉnh kinh nghiệm Rack/anything, vì vậy tôi đánh giá cao câu trả lời chi tiết.

Trả lời

15

Tôi đoán bạn cần phải thiết lập máy chủ Web của bạn, không phải Sinatra, để làm việc với SSL. Tại Sinatra, bạn có thể sử dụng phương thức request.secure? để kiểm tra việc sử dụng SSL.

SSL + Nginx: the first article, the second one.

22

này dường như để làm điều đó cho tôi:

require 'sinatra/base' 
require 'webrick' 
require 'webrick/https' 
require 'openssl' 

CERT_PATH = '/opt/myCA/server/' 

webrick_options = { 
     :Port    => 8443, 
     :Logger    => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG), 
     :DocumentRoot  => "/ruby/htdocs", 
     :SSLEnable   => true, 
     :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, 
     :SSLCertificate  => OpenSSL::X509::Certificate.new( File.open(File.join(CERT_PATH, "my-server.crt")).read), 
     :SSLPrivateKey  => OpenSSL::PKey::RSA.new(   File.open(File.join(CERT_PATH, "my-server.key")).read), 
     :SSLCertName  => [ [ "CN",WEBrick::Utils::getservername ] ] 
} 

class MyServer < Sinatra::Base 
    post '/' do 
     "Hellow, world!" 
    end    
end 

Rack::Handler::WEBrick.run MyServer, webrick_options 

[mũ chóp để http://www.networkworld.com/columnists/2007/090507-dr-internet.html]

+0

muốn đưa ra một số lời khuyên về [một câu hỏi tương tự] (http://stackoverflow.com/questions/14462558/error-bad-uri-khi-cố-to-get-webrick-to-accept-https)? – rampion

+0

Hoạt động như dự định nhưng làm cách nào để bạn đặt địa chỉ liên kết? : BindAddress dường như không dính. – Tim

+1

Điều này có vẻ như một câu trả lời phù hợp hơn cho câu hỏi – CodeMonkey

10

tôi sửa đổi quy tắc ứng richard_bw như để được gần gũi thể hoặc khởi động lại nó bằng cách bấm Ctrl + C:

require 'sinatra/base' 
require 'webrick' 
require 'webrick/https' 
require 'openssl' 

class MyServer < Sinatra::Base 
    post '/' do 
     "Hello, world!\n" 
    end    
end 

CERT_PATH = '/opt/myCA/server/' 

webrick_options = { 
    :Port    => 8443, 
    :Logger    => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG), 
    :DocumentRoot  => "/ruby/htdocs", 
    :SSLEnable   => true, 
    :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, 
    :SSLCertificate  => OpenSSL::X509::Certificate.new( File.open(File.join(CERT_PATH, "server.crt")).read), 
    :SSLPrivateKey  => OpenSSL::PKey::RSA.new(   File.open(File.join(CERT_PATH, "server.key")).read), 
    :SSLCertName  => [ [ "CN",WEBrick::Utils::getservername ] ], 
    :app    => MyServer 
} 
Rack::Server.start webrick_options 
+0

Làm cách nào để tạo chứng chỉ cho Webrick? –

+2

Depens on lý do tại sao bạn cần nó. Nếu nó chỉ là thử nghiệm bạn có thể phát hành một ký tự. Đây là cách để làm điều đó trên ubuntu: http://askubuntu.com/questions/49196/how-do-i-create-a-self-signed-ssl-certificate –

+0

Nếu bạn cần nó cho sản xuất, tôi sẽ kiểm tra của bạn công ty đăng ký tên miền cho dịch vụ đó. Ussualy bạn phải trả tiền cho nó. –

16

Tôi nghĩ sử dụng rack-ssl là tùy chọn tốt nhất.

Sau đó, bạn chỉ cần làm:

class Application < Sinatra::Base 
    use Rack::SSL 

    get '/' do 
    'SSL FTW!' 
    end 
end 

và tất cả http:// cuộc gọi được chuyển hướng đến https://

+0

Điều này chỉ hoạt động nếu bạn có chứng chỉ SSL được cài đặt –

+1

Vâng, bạn nên luôn luôn, tôi không nói về tùy chọn "VERIFY_NONE" ở đây :) –