39 votes

Comment faire fonctionner Sinatra sur HTTPS/SSL ?

Comme le dit le titre, Google ne donne rien d'utile à ce sujet.

Comment installer et configurer HTTPS/SSL pour les applications Sinatra ?

Comment créer une route HTTPS ?

Je n'ai jamais utilisé HTTPS pour mes applications auparavant et je n'ai aucune expérience dans le réglage de Rack/ou autre, donc j'apprécie les réponses détaillées.

23voto

richard_bw Points 91

Cela semble faire l'affaire pour moi :

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

[coup de chapeau à http://www.networkworld.com/columnists/2007/090507-dr-internet.html ]

0 votes

Voulez donner quelques conseils sur une question similaire ?

0 votes

Fonctionne comme prévu mais comment définir l'adresse de liaison ? :BindAddress ne semble pas coller.

2 votes

Cela semble être une réponse plus appropriée à la question.

16voto

Tomasz Wałkuski Points 590

Je pense qu'utiliser rack-ssl est la meilleure option.

Alors vous le faites :

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

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

et tout http:// les appels sont redirigés vers https://

0 votes

Cela ne fonctionne que si vous avez installé un certificat SSL.

1 votes

Eh bien, vous devriez toujours le faire, je ne parle pas de l'option "VERIFY_NONE" ici :)

15voto

Daniel Points 7197

Je suppose que vous devez configurer votre serveur Web, et non Sinatra, pour qu'il fonctionne avec SSL. Dans Sinatra, vous pouvez utiliser la fonction request.secure? pour vérifier l'utilisation du SSL.

SSL + Nginx : le premier article , le second .

11voto

Dmitriy Budnik Points 592

J'ai modifié le code de richard_bw afin de pouvoir le fermer ou le redémarrer avec 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 votes

Comment générer un certificat pour Webrick ?

2 votes

Cela dépend des raisons pour lesquelles vous en avez besoin. S'il s'agit juste d'un test, vous pouvez émettre un certificat auto-signé. C'est la façon de faire sur Ubuntu : askubuntu.com/questions/49196/

0 votes

Si vous en avez besoin pour la production, je vérifierais que votre registraire de domaine offre ce service. Il est probable que vous deviez payer pour cela.

0voto

Mohudu Points 21

La solution la plus simple que j'ai pu trouver après une large recherche, est la solution postée par Frank ici .

Il suffit de placer le texte suivant en haut de votre application Sinatra classic pour forcer votre application à utiliser HTTPS :

require 'rack/ssl-enforcer'
use Rack::SslEnforcer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X