本記事では、Let's Encrypt、CloudFlare、DNS-01 についての説明は一切ありません。また、インフラ初心者が執筆している(覚書)のでご注意ください。
CloudFlare の API Key を取得
CloudFlare の My Account ページにアクセスします。そのままページをスクロールすると API Key という項目があり、右側に View API Key というボタンがあるのでクリックします。表示された、API Key をメモしておいてください。
Let's Encrypt の SSL 証明書を取得する
以下がコマンド一覧です。pip コマンドがないよ!というエラーが出力された場合、$ yum -y install python python-pip
という感じで、インストールしてください。だいたいの場合、python はインストールされていると思うので、python-pip だけで大丈夫だと思います。
所々にコメントを入れていますので、参考にしてください。
$ git clone https://github.com/lukas2511/letsencrypt.sh /usr/local/letsencrypt.sh
$ git clone https://github.com/kappataumu/letsencrypt-cloudflare-hook /usr/local/letsencrypt.sh/hooks/cloudflare
$ cd /usr/local/letsencrypt.sh/
$ pip install -r ./hooks/cloudflare/requirements.txt # Python 3 用 ? CloudFlare Hook のマニュアル必読
$ pip install -r ./hooks/cloudflare/requirements-python-2.txt # Python 2 用 ? CloudFlare Hook のマニュアル必読
$ export CF_EMAIL='YOUR CLOUDFLARE LOGIN EMAIL ADDRESS'
$ export CF_KEY='YOUR CLOUDFLARE API KEY'
$ export CF_DNS_SERVERS='8.8.8.8 8.8.4.4' # 必要に応じて実行 CloudFlare Hook のマニュアル必読
$ vi ./domains.txt # 半角スペース区切りでドメインをリスト化 letsencrypt.sh のマニュアル必読
example.jp www.example.jp
$ mkdir /usr/local/letsencrypt.sh/.acme-challenges # アーカイブ用ディレクトリの作成
$ /usr/local/letsencrypt.sh/letsencrypt.sh -c -t dns-01 -k '/usr/local/letsencrypt.sh/hooks/cloudflare/hook.py'
発行される証明書
- サーバ証明書(公開鍵)
/usr/local/letsencrypt.sh/certs/example.jp/cert.pem - 中間証明書
/usr/local/letsencrypt.sh/certs/example.jp/chain.pem - サーバ証明書 + 中間証明書
/usr/local/letsencrypt.sh/certs/example.jp/fullchain.pem - 秘密鍵
/usr/local/letsencrypt.sh/certs/example.jp/privkey.pem
Let's Encrypt の SSL 証明書を自動取得する
Cron 登録用のスクリプトを作成。
$ vi /usr/local/letsencrypt.sh/cron.sh
以下をペースト。letsencrypt.sh のオプションの詳細は、letsencrypt.sh のマニュアル、または help コマンドを実行してください。
#!/usr/bin/env bash
export CF_EMAIL='YOUR CLOUDFLARE LOGIN EMAIL ADDRESS'
export CF_KEY='YOUR CLOUDFLARE API KEY'
/usr/local/letsencrypt.sh/letsencrypt.sh \
-c \
-x \
-t dns-01 \
-k '/usr/local/letsencrypt.sh/hooks/cloudflare/hook.py'
/usr/local/letsencrypt.sh/letsencrypt.sh -gc
systemctl restart nginx
実行権限を付与
$ chmod +x /usr/local/letsencrypt.sh/cron.sh
Job を登録
$ crontab -e
0 4 1 * * /usr/local/letsencrypt.sh/cron.sh >> /usr/local/letsencrypt.sh/cron.log 2>&1
以上で終了です。
あとがき
Certbot を使用した SSL 証明書の取得の場合、サーバーの公開ディレクトリに .well-known というディレクトリが作られたりして、何だか気になっていました。DNS-01 を使用した方法の場合、そういった何だか気になるディレクトリが作られたりしないので、筆者個人としては、DNS-01 を使用した方法の方がいいなーと思います。また、両方トライしてみた経験から、DNS-01 を使用した方法の方が、簡単に感じました。
※ プラグインに webroot を使用した場合、.well-known というディレクトリが作られます。その他のプラグイン(Apache、nginx、etc)は未確認です。