Heroku
SSL
HTTPS
letsencrypt
CoderDojo

Heroku ACM で SSL を自動更新してみた 🔧


背景


  • Let's Encryptで発行したSSL証明書が3月31日に切れる📴

  • どうせ更新するなら、自動化したいなぁ🤔

  • お、丁度いいタイミングでHerokuさんのプレスリリースが... :eyes:

:new: Automated Certificate Management

https://devcenter.heroku.com/articles/automated-certificate-management


With Automated Certificate Management (ACM), Heroku automatically manages TLS certificates for all apps that have Hobby and Professional dynos on the Common Runtime. Certificates handled by ACM automatically renew before they expire, and new certificates are created automatically whenever you add or remove a custom domain. All applications with paid dynos include ACM for free.

Automated Certificate Management uses Let’s Encrypt, the free, automated, and open certificate authority for managing your application’s TLS certificates. Let’s Encrypt is run for the public benefit by the Internet Research Security Group (ISRG).


メッチャ便利そうなので使ってみよう...!! :wrench: :dash:

ACM Setup.png


今回、自動更新したドメイン


前提条件



  1. :white_check_mark: Heroku上のアプリであること


  2. :white_check_mark: Hobbyプラン以上にしていること


  3. :white_check_mark: DNSをherokudnsに向けていること

なお、自分の場合はいずれも下記で設定済みなので、あとはACMを有効化してみるだけでした :wrench: :dash:

PRで解説する、Jekyll + Heroku で HTTPS 対応

http://qiita.com/yasulab/items/d900bb47bf73beada855


やってみた :wrench: :dash:

現在の状態は heroku certs:autoで確認できます。

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:auto

=== Automatic Certificate Management is disabled on coderdojo-japan

2017年3月20日以前に作成したアプリケーションで、かつ、ACMをまだ設定していないければ、ACMは disabled になっているはずです🤔


ACM is enabled by default for all applications created after March 21, 2017 that are running on Hobby or Professional dynos.

https://devcenter.heroku.com/articles/automated-certificate-management#enable-automated-certificate-management


Herokuのダッシュボードから Settings -> Configure SSL と辿ると、ACMを有効化することができます。

ACM Configure.png

問題なければ上記のように設定して Continue をクリック。ダッシュボード上では、自動更新の設定前はSSL証明書の期限が表示され、設定後は非表示になります。

ACM設定前:

ACM disabled.png

ACM設定後:

ACM enabled.png

(📝 今回はダッシュボードから設定していますが、heroku certs:auto:enableでも設定できるようです)

設定後、再度certs:autoを実行すると Waiting になっていることが確認できます。

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:auto

=== Automatic Certificate Management is __enabled__ on coderdojo-japan

Domain Status
──────────────── ───────
www.coderdojo.jp Waiting
coderdojo.jp Waiting

2~3分 待つと、In Progressに。

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:auto

=== Automatic Certificate Management is enabled on coderdojo-japan

Domain Status
──────────────── ───────────
www.coderdojo.jp In Progress
coderdojo.jp In Progress

45~60分 ほどすると、DNS Verifiedになりました。

Domain            Status

──────────────── ────────────
www.coderdojo.jp DNS Verified
coderdojo.jp DNS Verified

:warning: DNS Verifiedは「証明書が更新された」という意味ではないので注意 (成功は OK)。 したがって、この時点ではまだ証明書は更新できていません:

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:info

Fetching SSL certificate triceratops-84351 info for ⬢ coderdojo-japan... done

Certificate details:
Common Name(s): coderdojo.jp
Expires At: 2017-03-31 05:43 UTC
Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Starts At: 2016-12-31 05:43 UTC
Subject: /CN=coderdojo.jp
SSL certificate is verified by a root authority.


If your status says “DNS Verified”, the process is not finished yet. It means we have verified your domain status and are still in the process of submitting it to Let’s Encrypt. The process will be complete when it says “OK”.

https://devcenter.heroku.com/articles/automated-certificate-management#view-your-certificate-status



参考: 各ステーテスの意味

ACM Status.png


更新結果

DNS Verifiedからさらに30分ほど経つと、OKになりました。OKまでにかかる予想時間はドキュメントには書いていなかったので、もっと早かったり遅かったりするかもしれません🤔

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:auto

=== Automatic Certificate Management is enabled on coderdojo-japan

Certificate details:
Common Name(s): coderdojo.jp
www.coderdojo.jp
Expires At: 2017-06-28 00:48 UTC
Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Starts At: 2017-03-30 00:48 UTC
Subject: /CN=coderdojo.jp
SSL certificate is verified by a root authority.

Domain Status
──────────────── ──────
www.coderdojo.jp OK
coderdojo.jp OK

:pencil: :point_up: ACMで自動更新されるようになると、certs:infoを使わなくてもSSLの期限が表示されるようになりました。また、期限についても、 Let's Encryptの上限である3ヶ月間延長されている ことが確認できます :new: :sparkles:

cf. certs:infoの実行結果:

╭─○ yasulab ‹2.4.0› ~/coderdojo.jp

╰─○ heroku certs:info

Fetching SSL certificate triceratops-84351 info for ⬢ coderdojo-japan... done

Certificate details:
Common Name(s): coderdojo.jp
www.coderdojo.jp
Expires At: 2017-06-28 00:48 UTC
Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Starts At: 2017-03-30 00:48 UTC
Subject: /CN=coderdojo.jp
SSL certificate is verified by a root authority.

最後に、SSL証明書が自動更新された後、ページが正常に表示されることを確認します :white_check_mark: :eyes:

CoderDojo Japan.png

以上です ;)

SSLの自動更新がメッチャ簡単! Heroku すごいですね! 😆


宣伝 :loudspeaker:

弊社 (YassLab) ではCoderDojo JapanRailsガイドを始めとして、様々なOSSプロジェクトに貢献しています ;)

2017年度からRailsチュートリアルとRailsガイドの電子書籍版を出版しました! :closed_book: :orange_book: :sparkles: また、Railsチュートリアルの解説セミナーを収録した動画 (計34時間) も公開していますので、Railsを学びたい方はこちらもぜひ😸📹✨

rails_seminar.png

logo-yasslab-copy.png