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

ボクココ

サービス開発を成功させるまでの歩み

Heroku SSL Endpoint から Heroku SSL への移行方法

Heroku

ども、@kimihom です。

Heroku SSL のベータ期間がついに終わったので、本番の SSL Endpoint を Heroku SSL に移した。$20 が無料になるなんて、 Heroku さんの気前の良さは素晴らしい。以下に Route53 を使った場合の移行手順を詳細に記す。

Heroku SSL への移行方法

移行で痛い目を見ないように、まずは以下の記事をしっかりと読んでおこう。

devcenter.heroku.com

その上で Route53 で DNS 設定している場合の Heroku SSL 設定について詳しく紹介していく。

移行手順

まずは --type sni をつけて Heroku SSL に証明書をアップロードする。これらのファイル(.crt, .key) はすでに SSL Endpoint の設定時に使っただろうから詳しいことは説明しない。

$ heroku certs:add example.crt example.key --type sni

Resolving trust chain... done
Adding SSL certificate to ⬢ myapp... done
Certificate details:
Common Name(s): www.myapp.jp
                myapp.jp
Expires At:     2016-10-31 16:36 UTC
Issuer:         /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
Starts At:      2015-10-30 05:52 UTC
Subject:        /CN=www.myapp.jp
SSL certificate is verified by a root authority.

=== The following common names already have domain entries
www.myapp.jp
? Select domains you would like to add myapp.jp

Adding domain myapp.jp to ⬢ myapp... done

=== Your certificate has been added successfully.  Update your application's DNS settings as follows
Domain              Record Type  DNS Target
──────────────────  ───────────  ────────────────────────────────
www.myapp.jp  CNAME        www.myapp.jp.herokudns.com
myapp.jp      ALIAS/ANAME  myapp.jp.herokudns.com



$ heroku certs

Name                Endpoint                     Common Name(s)                      Expires               Trusted  Type
──────────────────  ───────────────────────────  ──────────────────────────────────  ────────────────────  ───────  ────────
velociraptor-5555  (Not applicable for SNI)     www.myapp.jp, myapp.jp  2016-10-31 16:36 UTC  True     SNI
hokkaido-1111       hokkaido-1111.herokussl.com  www.myapp.jp, myapp.jp  2016-10-31 16:36 UTC  True     Endpoint

この状態では 2つの証明書情報がアップされたことになっている(velociraptor-5555 が Heroku SSL, hokkaido-1111 が SSL Endpoint)。 Not applicable for SNI とあるのは、現状で 2つ設定されているかららしい。以下の記事参照 When viewing SSL certificates, what does "Not applicable for SNI" mean? - Knowledge Base

次に Heroku SSL でのカスタムドメインを調べておこう。

$ heroku domains

=== myapp Heroku Domain
myapp.herokuapp.com

=== myapp Custom Domains
Domain Name         DNS Target
──────────────────  ────────────────────────────────
www.myapp.jp  www.myapp.jp.herokudns.com
myapp.jp      myapp.jp.herokudns.com

www.myapp.jp.herokudns.com ってのが新しい向き先らしい。今までは hokkaido-1111.herokussl.com みたいなドメインだった。

これを Route53 の CNAME レコードに設定すれば OK。具体的にはwww.myapp.jpwww.myapp.jp.herokudns.com.に向くようにする。これは Route53 の TTL 設定によってしばらく待つことになるだろう。

しばらくして dig www.myapp.jp cname +short の戻りが www.myapp.jp.herokudns.com. になったら移行が完了したことになる。それが確認できたら、SSL Endpoint を削除しよう。 $20 の節約だ!

heroku addons:destroy ssl

以上で無事に更新が完了する。

終わりに

私の場合、 SSL Endpoint を早めに削除しすぎて数分ほどアクセスできない状態ができてしまった。。 移行の場合のドキュメントがイマイチ具体的な手順がわかりにくかったってのがあったので、本記事でより安全な SSL の移行をしていただけたらと思う。