読者です 読者をやめる 読者になる 読者になる

さかめも

人生を楽しく豊かにする方法

Heroku で SSL(https)を導入する方法(2016年7月 最新版!)

heroku ウェブサービス

f:id:sakagami5:20150503232052p:plain

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を導入することで、セキュリティ向上につながることに加え、
GoogleHTTPS をランキング シグナルに使用するという発表もあり、
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