Let's Encrypt でサーバー証明書を取得するために、
https://github.com/sorah/acmesmith を使わせて頂きました。
ありがとうございました。
また、作業をするにあたって
https://blog.1q77.com/2016/02/acmesmith-1/
を参考にさせて頂きました。
ありがとうございました。
基本的に、上記ブログ及び README を見ると、
使用できました。
しかし、いくつかハマリポイントがあったので、
全体の流れを書きつつまとめていきます。
前提条件
https://github.com/sorah/acmesmith/blob/master/README.md#3rd-party-plugins
でも言及されていますが、AWS の Route53 を使用していることが前提になっています。
Google Cloud DNS 等をお使いの方は、適宜 サードパーティープラグインを使用する必要があります。
今回は、Route53を使う想定で書いていきます。
使用した環境
CentOS7のdockerコンテナ上で作業を行いました。
/etc/hoge というディレクトリを HOST OS上で作成し、 docker にマウントしました。
これにより、生成した証明書はHOST OS から参照できます。
バージョン情報は、それぞれ下記の通りです。
rbenv 1.1.0-2-g4f8925a
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
Bundler version 1.14.5
また、サーバー証明書をS3 にあげることもできるらしいですが、
簡単のため、今回はサーバー証明書をローカルに置くことにしました。
なお、ruby環境を構築するにあたっては、
http://qiita.com/Fendo181/items/d14ebfb148223c8e5ecb
を参考にさせていただきました。
やったこと
1. Gemfile の生成
任意のディレクトリで、
bundle init
というコマンドを実行し、Gemfile
というファイルを生成しました。
2. Gemfile の編集
できたGemfile の中は、
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
と書かれていました。
これに、
gem 'acmesmith'
を追記し、
# frozen_string_literal: true
source "https://rubygems.org"
gem 'acmesmith'
# gem "rails"
としました。
その後、
bundle install --path vendor/bundle
を実行しました。
3. IAM の取得
Route53 にアクセスするために、 IAM の設定を行う必要があります。
今回は新しいユーザーを作成し、IAM の設定を行いました。
なお、権限は、 AmazonRoute53FullAccess
が必要でした。
4. acmesmith.yml の作成
acmesmith.yml
というファイルを作成する必要がありました。
その中に、
endpoint: https://acme-v01.api.letsencrypt.org/
storage:
type: filesystem
path: /etc/hoge # <- ファイルを置くパス
challenge_responders:
- route53:
aws_access_key:
access_key_id: アクセスキー # <- 前述のIAM を作成した時にもらえるのaccess_key_idを置く
secret_access_key: 秘密キー # <- 前述のIAM を作成した時にもらえるsecret_access_keyを置く
session_token: # 空のままにした
hosted_zone_map:
"ドメイン名": "AWS Route 53 の Hosted Zone ID" # ダブルクォーテーションをつけて書く
account_key_passphrase: # 空のままにした
certificate_key_passphrase: # 空のままにした
を記載しました。
この設定を間違えてて結構はまりました。。。
5. .pem ファイルの作成
bundle exec acmesmith register mailto:xxx@example.org
を実行すると、
/etc/hoge
にaccount.pem
ファイルが作成されました。
ちなみに、ここではmailto
をつけるのを忘れてハマりました。。
6. 証明書を発行
ここまでの設定が全てうまくいっていたら、
bundle exec acmesmith authorize ドメイン名
というコマンドを打つことにより、ドメイン認証が行われます。
結果の画像を撮り忘れたので、
上述の https://blog.1q77.com/2016/02/acmesmith-1/ を見ていただけると良いと思います。
7. 証明書を保存
ここまですべてうまく行ったら、
bundle exec acmesmith request 上と一緒のドメイン名
と打つことにより、
/etc/hoge
に証明書が保存されます。
8. 以上
以上で完了です。
ruby を使ったことがない初心者でも、2時間ぐらいで(かかりすぎw)人の手を借りつつ証明書を取得できました!
この記事読めば、30分ぐらいでできるようになるはずです。
ちなみに、Let's Encrypt の証明書は90日で期限が切れるそうですが、
自動で更新する方法もあるようです。
僕はまだ設定していませんが、
調べてみるといいと思います。