LoginSignup
17
13

More than 5 years have passed since last update.

Heroku で Let's Encrypt 無料証明書を使う(自動更新あり)

Last updated at Posted at 2016-11-22

letsencrypt-rails-heroku

便利な gem が出てきて、 Heroku でも気軽に設定できる、更に自動更新もできるようになったので、共有致します。

ほぼ gem の README のままですが、順番調整と注意ポイントもあります。

手順

  1. gem 追加
  2. Heroku 環境変数追加
  3. SSL証明書生成
  4. Heroku Scheduler 自動更新設定追加

1. gem追加

  • gem 追加して、bundle installを実行する
gem 'platform-api', github: 'jalada/platform-api', branch: 'master'
gem 'letsencrypt-rails-heroku', group: 'production'
  • 設定追加
config/environments/production.rb

Rails.application.configure do
  ...

  config.middleware.use Letsencrypt::Middleware

  ...
end

Heroku への push を忘れずに

2. Heroku 環境変数追加

  • Heroku Token 作成しておく
$ heroku plugins:install heroku-cli-oauth
$ heroku authorizations:create -d "LetsEncrypt"
Created OAuth authorization.
  ID:          <heroku-client-id>
  Description: LetsEncrypt
  Scope:       global
  Token:       <heroku-token>
  • Heroku 環境変数追加
heroku config:add ACME_DOMAIN=example.com,www.example.com ACME_EMAIL=admin@example.com HEROKU_APP=you_app_name HEROKU_TOKEN=上記で作成したtoken

3. SSL証明書生成

heroku run rake letsencrypt:renew

4. Heroku Scheduler 自動更新設定追加

# 毎月の1日が更新する
if [ "$(date +%d)" = 01 ]; then rake letsencrypt:renew; fi

注意ポイント

  • 証明書を生成するステップの中、 Heroku 側へのリクエストは HTTP で来るので、対応が必要
  • SSL導入したら、config/environments/production.rbforce_ssl = trueを書きたいですが、上記の理由で、SSL証明書生成する時の(コールバックみたいな)URLだけ HTTP にする必要がある

Rails 4 のやり方

# application_controller.rb に追加
force_ssl if: :force_ssl?

private

  def force_ssl?
    not request.path =~ /^.well-known\/acme-challenge/
  end

Rails 5 のやり方

# config/environments/production.rb
config.force_ssl = true
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /^.well-known\/acme-challenge/ } } }

参考リンク:Rails 5 ssl_options

17
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13