如标题所示,谷歌没有提供有关此事的任何有用信息。
如何为Sinatra应用程序设置和配置HTTPS/SSL?
如何创建一个HTTPS路由?
我以前从未在我的应用程序中使用过HTTPS,也没有调整Rack/任何其他东西的经验,因此感谢详细的答案。
如何为Sinatra应用程序设置和配置HTTPS/SSL?
如何创建一个HTTPS路由?
我以前从未在我的应用程序中使用过HTTPS,也没有调整Rack/任何其他东西的经验,因此感谢详细的答案。
这似乎对我有用:
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
[致谢 http://www.networkworld.com/columnists/2007/090507-dr-internet.html]
class Application < Sinatra::Base
use Rack::SSL
get '/' do
'SSL FTW!'
end
end
并且所有的 http://
请求都将被重定向到 https://
我修改了richard_bw的代码,使其能够使用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
:Host
Rack 选项来监听公共接口,否则它总是只能监听本地主机::Host => "0.0.0.0"
。参见 Class: Rack::Server。:BindAddress
Webrick 选项没有按预期工作。 - Ludovic Kuty为了避免使用多个服务器,这里的webrick特定答案是可以的,但是只适用于webrick。
当使用Puma时,配置可以简化:
require 'sinatra/base'
class MyServer < Sinatra::Base
post '/' do
"Hello, world!\n"
end
end
Rack::Server.start app: MyServer, Host: "ssl://0.0.0.0:8443?key=privkey.pem&cert=cert.pem"