Rakuten Technology Conference 2017でLet's Encryptの事例を発表してきた
楽天さんが開催された
「Rakuten Technology Conference 2017」でLTしてきました!
発表内容
5分間のLTということもあり、かなり駆け足で発表してしまったので
捕捉しつつ内容について説明していこうと思います。
証明書の発行の仕方(例)について
certbot
コマンドを使用した例を出してます。
今回の発表ではDNS-01認証を選択していますが、
このcertbotでのDNS-01認証はアクセストークン(チャレンジレコード)の
TXTレコード登録はサポートしてないので、その辺を自動化したい場合は、
発表中に出てくる「lego」などを使用しましょう。
legoについては下記記事で紹介してます。
Let's EncryptのDNS認証による証明書発行/更新の自動化をやってみた https://blog.haramishio.xyz/post/000002/>
アーキテクチャについて
証明書の発行は、Jenkinsを使用しています。
ここはなんでもいいと思いますが、SANsを使用して何十個もドメインを含めた場合、
証明書の新規発行に30分以上は確実にかかります。
時間制約があるAWS Lambdaなどでは実施しづらいので注意してください。
また図中の右側はプロジェクト単位ごとに存在します。
つまりプロジェクトにつき1つの証明書を発行するようにしてます。
プロジェクトではsand環境やstaging環境などあると思いますが、
すべて同じ証明書を参照するようにしてます。
この方法だと1プロジェクトにつき100ドメインしか指定できませんが、
そんな数のドキュメントを1プロジェクトで使うこともないだろうというのと
100を超えてももう1個証明書を発行すればいいだけなので特に問題にはなりません。
実装について
LEクライアントは上記に書いた「lego」を使ってます。
legoを選択した理由は、Route53に対してアクセストークンの書き込みを自動で行ってくれるからです。
もちろんRoute53に対する捜査権限が必要ですが。
またLEの認証方式は現時点で以下の3つが使えます。
HTTP-01およびTLS-SNI-01はPort80または443での認証を行います。
具体的には、LEが指定するディレクトリにアクセストークンファイルを設置しに来ます。
対象ドメインの指定の場所にファイルを置くことができ、LEがそのファイルに対してhttpアクセスできれば
認証が通ったことになります。
これは非常に便利でWebサーバーの設定をしておけば
発行と更新は勝手にやってくれます。
ただこの認証方式のデメリットは、
Port80または443を外部に全開放しなければならない
ということです。
本番公開しているサーバーにだったらこれでもいいんですが
開発環境や管理ツールなど外部に公開したくない環境では使いづらいです。
そのため「DNS-01」認証を使用しました。
最後に
ということで資料の補足でした。
LEをどう運用していこうか悩まれている方の参考になれば幸いです。
楽天テックカンファでLTをするという貴重な機会をいただいたのでよかったです。(自分から応募したけど笑)
またLT全体としても、とても多岐にわたる発表内容で勉強になりました!
来年もあれば参加したいな~と思ってます(`・ω・´)
では!