Heroku SSL EndpointからAutomated Certificate Managementへ移行する

Heroku SSL EndpointからAutomated Certificate Managementへダウンタイムなしで移行したので、その記録。

Heroku SSL化を挟まないと、heroku certs:auto:enableしてからstatus: OKになるまでの間にダウンタイムが発生する。そのあたりの注意点は公式ドキュメントに書いてあった。

https://devcenter.heroku.com/articles/automated-certificate-management#migrating-from-ssl-endpoint
Migrating from the SSL Endpoint addon to Automated Certificate Management requires a DNS change. However, you can use Heroku SSL (SNI) as an intermediate step to avoid downtime for your custom domain. Start by following these instructions to migrate from SSL Endpoint to Heroku SSL (SNI). Once that process is complete, you can enable ACM with no downtime as described above.

いちど、Heroku SSLへ移行してから、ACM(Automated Certificate Management)へ移行すればいい。

Heroku SSLを使うには、heroku certs:addコマンドに--type sniオプションを付けて証明書を追加する。

このとき、既存の証明書と同じものをアップロードしてオッケー。

1
heroku certs:add example.com.crt example.com.key --type sni

すると、こんな感じで2つの証明書が表示される。

1
2
3
4
5
heroku certs -a pplog
Name Endpoint Common Name(s) Expires Trusted Type
────────────────── ──────────────────────── ──────────────────────── ──────────
gifu-1545 gifu-1545.herokussl.com www.pplog.net, pplog.net 2018-01-30 03:10 UTC True Endpoint
camarasaurus-91097 (Not applicable for SNI) www.pplog.net, pplog.net 2018-01-30 03:10 UTC True SNI

ドメインを確認すると

1
2
3
4
5
6
7
8
9
heroku domains -a pplog
=== pplog Heroku Domain
pplog.herokuapp.com

=== pplog Custom Domains
Domain Name DNS Record Type DNS Target
───────────── ─────────────── ───────────────────────────
www.pplog.net CNAME www.pplog.net.herokudns.com
pplog.net ALIAS or ANAME pplog.net.herokudns.com

CNAMEALIASに設定すべき項目が表示されるので、これらをDNSの設定に反映する。

1
dig CNAME www.pplog.net

TTLの設定に寄るけども、DNS反映されたら、Heroku SSL Endpointのアドオンを削除する。(焦らなくてもいいので次の日にでも)

1
heroku addons:destroy ssl -a pplog

Automated Certificate Managementを有効にする。

1
2
heroku certs:auto:enable -a pplog
Enabling Automatic Certificate Management... done

すぐに確認すると、In Progressになっている。

1
2
3
4
5
6
7
heroku certs:auto -a pplog
=== Automatic Certificate Management is enabled on pplog

Domain Status
───────────── ───────────
www.pplog.net In Progress
pplog.net In Progress

しばらくすると、OKになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
heroku certs:auto -a pplog
=== Automatic Certificate Management is enabled on pplog

Certificate details:
Common Name(s): pplog.net
www.pplog.net
Expires At: 2018-01-30 04:51 UTC
Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Starts At: 2017-11-01 04:51 UTC
Subject: /CN=pplog.net
SSL certificate is verified by a root authority.

Domain Status
───────────── ──────
www.pplog.net OK
pplog.net OK

証明書のTypeACMになっていれば完了。

1
2
3
4
heroku certs -a pplog
Name Common Name(s) Expires Trusted Type
────────────────── ──────────────────────── ──────────────────── ─────── ────
camarasaurus-91097 pplog.net, www.pplog.net 2018-01-30 04:51 UTC True ACM