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