Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

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
13
Help us understand the problem. What are the problem?