【问题标题】:Sinatra on Ubuntu 12 - SSL errorUbuntu 12 上的 Sinatra - SSL 错误
【发布时间】:2012-11-06 10:09:59
【问题描述】:

Sinatra 应用程序,Ubuntu 12

#config.ru
require 'sinatra/base'
require 'openssl'
require 'webrick'
require 'webrick/https'

class App1 < Sinatra::Base
  get '/' do
    'app1'
  end
end

class App2 < Sinatra::Base
  get '/' do
    'app2'
  end
end

app = Rack::Builder.new do 
  map '/app1' do
    run App1
  end
  map '/app2' do
    run App2
  end
end

webrick_options = {
  :Port               => 8443,
  :Logger             => WEBrick::Log::new($stdout, WEBrick::Log::DEBUG),
  :DocumentRoot       => "./public",
  :SSLEnable          => true,
  :SSLCertificate     => OpenSSL::X509::Certificate.new(  File.open("/etc/ssl/certs/ssl-cert-snakeoil.pem").read),
  :SSLPrivateKey      => OpenSSL::PKey::RSA.new(          File.open("/etc/ssl/private/ssl-cert-snakeoil.key").read),
  :SSLCertName        => [ [ "CN",WEBrick::Utils::getservername ] ]
}

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

然后我运行它

sudo rackup

它运行了,似乎没问题:

[2012-11-06 16:10:14] INFO  WEBrick 1.3.1
[2012-11-06 16:10:14] INFO  ruby 1.9.3 (2012-04-20) [x86_64-linux]
[2012-11-06 16:10:14] DEBUG TCPServer.new(0.0.0.0, 8443)
[2012-11-06 16:10:14] DEBUG TCPServer.new(::, 8443)
.......

但是当我转到 http://localhost:8443/app1 时,我得到了

[2012-11-06 17:07:25] ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=unknown state: http request
        /usr/lib/ruby/1.9.1/openssl/ssl-internal.rb:164:in `accept'
[2012-11-06 17:07:25] ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=unknown state: http request
        /usr/lib/ruby/1.9.1/openssl/ssl-internal.rb:164:in `accept'
[2012-11-06 17:07:25] ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=unknown state: http request
        /usr/lib/ruby/1.9.1/openssl/ssl-internal.rb:164:in `accept'

以及页面中的“此网页不可用”标签。

我做错了什么?

【问题讨论】:

    标签: ruby ubuntu ssl sinatra webrick


    【解决方案1】:

    WEBrick 将浏览器的 HTTP 请求解释为格式错误的 HTTPS 请求。

    要改为发出 HTTPS 请求,请访问 https://localhost:8443/app1

    您总是可以在端口 8080 上运行第二个服务器,它将 HTTP 请求重定向到 HTTPS URL。

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多