Help us understand the problem. What is going on with this article?

Sinatraでローカル環境のWEBrickをHTTPSで動かす

More than 3 years have passed since last update.

TL;DR

  • Sinatra + WEBrick + HTTPS
  • WEBrickは起動時のオプションで下記を指定すればよい
    • SSLEnable: true
    • SSLCertificate: [['CN', WEBrick::Utils.getservername]]1
  • SinatraからWEBrick起動時のオプションを渡すにはset :server_settingsを使う

環境

  • Windows10
    • ruby 2.4.1p111 (2017-03-22 revision 58053) [x64-mingw32]
    • sinatra 1.4.8
  • OSX
    • ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
    • sinatra 2.0.0

なお、Sinatraはクラシックスタイルでの利用

鍵の作成

下記を参考に作成。
Creating a Self-Signed SSL Certificate | Heroku Dev Center
ただ、最終的にWEBrickで自動作成するなら不要。

Sinatraでのサーバへの設定

sinatra/base.rb#L1452
つまり

set :server_settings, options

とすればいいので下記の感じに。

if settings.development?
  require 'webrick/https'
  require 'openssl'
  ssl_options = {
    SSLEnable: true,
    SSLCertificate: OpenSSL::X509::Certificate.new(File.open('./server.crt').read),
    SSLPrivateKey:  OpenSSL::PKey::RSA.new(File.open('./server.key').read)
  }
  set :server_settings, ssl_options
end
  • server.crtserver.keyは起動前に所定の場所に配置する
    • ただし、WEBrickで自動作成するなら不要
  • if settings.development?は本番では必要ないための分岐

WEBrickで証明書を自動作成するようにする

  • Sinatra(WEBrick)でsslサーバをたてる
    • 初期起動時に鍵を自動生成するという点の参考にさせて頂く
    • WEBrick::Utils::create_self_signed_certってのがあることに気がつく
    • WEBrickのソースを眺めてみることにした
  • https://github.com/ruby/ruby/blob/ruby_2_4/lib/webrick.rb#L88-L121
    • 普通にHTTPSの場合について書いてあった
    • SSLEnabletrueにして
    • SSLCertName[['CN', WEBrick::Utils.getservername]]とかにする
    • 起動のたびに証明書が再作成される
    • 事前作成したものを使用する場合あ先述の方法でOK
  • Sinatra + WEBrick + HTTPS
    • 以上をもとに必要最低限のコードを書いてみた

  1. webrick.rb記載のように[%w[CN localhost]]でもいい。 

k-ta-yamada
LinuxとかRubyとか初心者です。 自分と同じように悩む?悩んだ?誰かのお役に立てば幸いです。
https://k-ta-yamada.me
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした