Heroku で SSL(https)を導入する方法

2016年5月下旬に、「Heroku SSL」という機能がベータ版で公開されました。

関連サイトAnnouncing Heroku Free SSL Beta and Flexible Dyno Hours | Heroku

 

今までは $20 のSSLアドオンを用いてSSLを導入する方法を提供していたのですが、Hobby、Professional Dyno を用いている環境において、これからはそれが無料で実現できるようになるとのこと。

 

SSLを導入することで、セキュリティ向上につながることに加え、Google が HTTPS をランキング シグナルに使用するという発表もあり、SEOにも有利になります。

関連サイトGoogle ウェブマスター向け公式ブログ: HTTPS をランキング シグナルに使用します

 

ここでは、SSL証明書をSSLストアで購入して Heroku に導入する手順を記載していきます。

 

SSL証明書を取得

秘密鍵を生成

コマンド実行時にパスフレーズを求められるので、忘れないパスワードを入力。

$ openssl genrsa -des3 -out server.pass.key 2048
$ openssl rsa -in server.pass.key -out server.key

 

これで server.key が生成されます。

 

CSRを生成

$ openssl req -nodes -new -key server.key -out server.csr
Country Name (2 letter code) [AU]:JP <- 国名
State or Province Name (full name) [Some-State]:Tokyo <- 都道府県名
Locality Name (eg, city) []:Shibuya-ku <- 市区町村名
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <- 組織名
Organizational Unit Name (eg, section) []:System <- 部門名
Common Name (e.g. server FQDN or YOUR name) []: <- SSLを導入するサイトのURL(FQDN)
Email Address []: <- (省略可)
A challenge password []: <- (省略可)
An optional company name []: <- (省略可)

 

これで server.csr が生成されます。

 

SSLストアで証明書を購入

SSLストア に登録し、証明書を購入。ここでは「RapidSSL 1年」を購入しました。

 

証明書管理のページからアクティベート待ちとなっている証明書の「詳細」ボタンをクリックし、証明書詳細のウィンドウが表示されたら「アクティベート(申請)する」ボタンをクリック

その先のページの「上記の内容で申請」ボタンをクリック

 

CSRのフォームに、さきほど生成した server.csr の内容をコピペして「確認」ボタンをクリックし、証明書発行内容に問題がなければ「申込みを確定する」ボタンをクリック

 

SSLストアの認証

申請から30~60分程度で「認証ファイル発行のご案内」メールが届くので、案内に従って認証ファイルをサーバへアップロ-ドし、指定されているURLで認証ファイルの中身が確認できる状態にしておきます。

 

サーバ証明書と中間証明書を保存

認証が終わると、証明書がメールで送られてくるのでコピペして保存します。

ここでは、サーバ証明書を server.orig.crt 、中間証明書を bundle.pem で保存しました。

 

サーバ証明書と中間証明書を結合

Heroku ではサーバ証明書と中間証明書を一つのファイルにまとめる必要があります。

$ cat server.orig.crt bundle.pem > server.crt

 

これで server.crt が生成されます。

 

HerokuにSSLを導入

Labs flag を有効にして、heroku-certs プラグインをインストール

$ heroku labs:enable http-sni -a your-app
$ heroku plugins:install heroku-certs

 

証明書を追加

$ heroku _certs:add server.crt server.key

 

追加された証明書を確認

$ heroku _certs:info

 

ドメインのDNSを変更

ドメインのDNSを以下の例のように変更します。

Heroku ダッシュボードの「settings」でも確認できます。

 

例: www.yourdomainname.com.herokudns.com

 

アプリケーション上の通信を常にSSLで行う設定(Rails の場合)

config/environments/production.rb の設定を以下のように修正。

config.force_ssl = true

 

確認

ブラウザでURLにアクセスして、正しくSSLが設定されていることを確認。

 

関連する公式ドキュメント

Manually Acquiring an SSL/TLS Certificate | Heroku Dev Center

Heroku SSL | Heroku Dev Center