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でのサーバへの設定
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.crt
とserver.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の場合について書いてあった
-
SSLEnable
をtrue
にして -
SSLCertName
を[['CN', WEBrick::Utils.getservername]]
とかにする - 起動のたびに証明書が再作成される
- 事前作成したものを使用する場合あ先述の方法でOK
-
Sinatra + WEBrick + HTTPS
- 以上をもとに必要最低限のコードを書いてみた
-
webrick.rb記載のように[%w[CN localhost]]でもいい。 ↩