独自ドメインを使う場合です。
#独自ドメインの設定
独自ドメインの取得、DNS設定の説明は簡略化します。
-
お名前.com等で独自ドメインを取得
-
DNSでCNAME登録
(Rootドメインの場合はCNAMEが使えないところが多いので対応が面倒そうです・・・)
*追記しました: [追記] ルートドメイン(Naked Domain)の設定方法
Value : APP_NAME.heroku.com
#SSL add onの追加
有料($20/month)です。
heroku addons:add ssl
#SSL証明書の取得
StartSSLを利用すれば無料で取得できます。
https://www.startssl.com/
StartSSLでの取得方法はググるといろいろ出てくるのでこちらも省略します。
参考 : http://qiita.com/k-shogo/items/870b6d3939dd08da2de4
ただ、ハマった点だけメモしておきます。
##証明書のRevokeは有料!
StartSSLで独自ドメインのSSL証明書を発行してHerokuにアップロードします。
heroku certs:add server.crt server.key
このエラーで先に進めず・・・。
No certificate given is a domain name certificate.
以下のコマンドで確認すると、なんと秘密鍵と公開鍵の組み合わせが間違っていることが判明・・・。
openssl x509 -in server.crt -noout -modulus
openssl rsa -in server.key -noout -modulus
StartSSLの画面上で秘密鍵の生成も行ったのですが、ページが重すぎてゴニョゴニョしているうちに秘密鍵をなくした状態で公開鍵を作ってしまっていたようです。
その後、新しい秘密鍵で作りなおしたのですが公開鍵は古いものとペアだったようです。
ほんとのところはよく分かりません・・・。
問題は一度発行した証明書をRevokeするのは有料だということです。
F.A.Qによると$24.90とのこと。
気をつけましょう。
#秘密鍵からパスワードを削除
openssl rsa -in server.orig.key -out server.key
#ルートの証明書と中間証明書を結合
StartSSLから証明書を落としてきて、StartSSLで作成した公開鍵と一緒にします。
wget https://www.startssl.com/certs/ca.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
cat server.orig.crt sub.class1.server.ca.pem ca.pem > server.crt
#証明書のアップロード
heroku certs:add server.crt server.key
証明書アップロード時に独自ドメインSSL用のEndPointが表示されるのでメモしておきます。
#DNSの設定
SSL用のEndPointはこのコマンドでも確認できます。
heroku certs --app APP_NAME
Endpoint(fukui-7777.herokussl.comのようなアドレス)をDNSレコードにCNAME登録します。
(独自ドメイン設定の時にAPP_NAME.heroku.comと設定しているところをSSL用のendpointに書き換えます)
反映が完了したらhttpsで接続できるようになるはずです。
#[追記] ルートドメイン(Naked Domain)の設定方法
以下のページにあるように、PointDNSというサービスを使うと簡単にできます。
http://shindolog.hatenablog.com/entry/2015/02/01/225521
基本的な設定は上記サイトを見ればできると思います。
自分の場合はお名前.comで取得したドメインを使用したのでそちらの設定も書いておきます。
お名前.com側でネームサーバーの変更をする必要があるので、PointDNSのネームサーバー(管理画面のNameServersタブで確認できます)を設定します。
##ルートドメインでSSL接続
SSL接続をする場合は、PointDNSの設定で"[APP_NAME].heroku.com"となっているところをSSL用のEndPoint"~.herokussl.com"に変更します。