2016年5月下旬に、「Heroku SSL」機能がベータ版で公開されました。
https://blog.heroku.com/archives/2016/5/18/announcing_heroku_free_ssl_beta_and_flexible_dyno_hours
今までは $20 のSSLアドオンを用いてSSLを導入する方法を
提供していたのですが、Hobby、Professional Dyno を用いている
環境において、これからはそれが無料で実現できるようになるとのこと。
SSLを導入することで、セキュリティ向上につながることに加え、
Google が HTTPS をランキング シグナルに使用するという発表もあり、
SEOにも有利になります。
http://googlewebmastercentral-ja.blogspot.jp/2014/08/https-as-ranking-signal.html
ここでは、SSL証明書をSSLストア(https://www.ssl-store.jp/)で購入して、
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が設定されていることを確認。
参考URL
https://devcenter.heroku.com/articles/acquiring-an-ssl-certificate https://devcenter.heroku.com/articles/ssl-beta