SSL 証明書 CertbotCloudflareワイルドカード証明書無料取得自動更新

Let’s Encrypt ワイルドカード証明書を取得・自動更新する|Cloudflare

certbot-cloudflare SSL 証明書
スポンサーリンク

今回は Cloudflare ( クラウドフレア ) で DNS-01 方式 ワイルドカード証明書を取得・自動更新 ( CRON JOB ) する方法を紹介します。クラウドフレアへアカウント登録および DNS ネームサーバの変更とdns-cloudflare プラグインをインストールが必要です。OS は CentOS7 です。

事前準備

  • 事前準備1
    Cloudflare ( クラウドフレア ) 側
    • https://dash.cloudflare.com/sign-up へ接続し、EmailPassword を入力して Create Account をクリックします。
    • メールボックスを確認して Verify email をクリックして登録を完了します。
    • ログインして Add site > サイト名入力(例:example.com) > Next > Select PlanFREE を選択 > Confirm plan > confirm > DNS query results for
      example.com 画面で continue > Change your Nameserversで To の2つの DNS ネームサーバをコピーしてメモっておく!

    遷移されたページをそのまま開いておいてください。

  • 事前準備2
    ドメイン登録機関側

    仮に、example.com のドメイン登録は Freenom で行ったと前提します。Freenom にアクセスして先ほどメモった DNS ネームサーバに書き換えます。変更方法は こちら をご参考ください。

    # 例:
    norm.ns.cloudflare.com (173.245.59.134)
    ulla.ns.cloudflare.com (173.245.58.233)
    
    # ping コマンドでIPアドレスを取得
    [root@centos7 named]# ping norm.ns.cloudflare.com
    PING norm.ns.cloudflare.com (173.245.59.134) 56(84) bytes of data.
    64 bytes from norm.ns.cloudflare.com (173.245.59.134): icmp_seq=1 ttl=58 time=7.42 ms
    
    [root@centos7 named]# ping ulla.ns.cloudflare.com
    PING ulla.ns.cloudflare.com (173.245.58.233) 56(84) bytes of data.
    64 bytes from ulla.ns.cloudflare.com (173.245.58.233): icmp_seq=1 ttl=58 time=7.27 ms
  • 事前準備3
    Cloudflare ( クラウドフレア ) 側

    終わったら先ほどのクラウドフレア側の画面に戻って、Re-check now をクリックして連動を完了します。
    ログイン後初期画面には、追加したサイトリストがあります。そこに example.com に Active 表示が出ていたら OK です。

サーバ環境 ( CentOS 7.6 / Apache 2.4.39 / BIND 9.9.4)

[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[root@centos7 ~]# /usr/local/apache2/bin/httpd -v
Server version: Apache/2.4.39 (Unix)
Server built:   May 26 2019 16:03:35

[root@centos7 ~]# named -v
BIND 9.9.4-RedHat-9.9.4-74.el7_6.1 (Extended Support Version)

[root@centos7 named]# certbot --version
certbot 0.34.2
[root@centos7 named]#

Certbot と dns-cloudflare プラグインをインストール

(選択) 既に設置されたパッケージがあれば /etc/letsencrypt をバックアップし、全て削除してからインストールするのが楽です。

# 削除
[root@centos7 named]# mv /etc/letsencrypt /etc/letsencrypt-bak
[root@centos7 named]# yum remove -y `yum list installed | cut -d " " -f 1  | grep certbot`

# インストール
[root@ centos7〜]#yum install epel-release
[root@ centos7〜]#yum install certbot python2-certbot-dns-cloudflare

# 確認
[root@centos7 named]# yum list installed | grep certbot
certbot.noarch                        0.34.2-3.el7               @epel
python2-certbot.noarch                0.34.2-3.el7               @epel
python2-certbot-dns-cloudflare.noarch 0.34.2-1.el7               @epel
[root@centos7 named]#

Certbot 用 Cloudflare API credentials を作成

クラウドフレアのアカウントページ から Global API Key を取得できます。

[root@centos7 ~]# mkdir -p ~/.secrets/certbot/
[root@centos7 ~]# chmod 600 ~/.secrets/certbot/cloudflare.ini
[root@centos7 ~]# vi ~/.secrets/certbot/cloudflare.ini
# Cloudflare API credentials used by Certbot
dns_cloudflare_email = admin@example.com
dns_cloudflare_api_key = 8345692e953e123456de118bfe478054b8b8a

[root@centos7 ~]#

ワイルド証明書の発行テスト

ここからは、
tail -f /var/log/message 又は、journalctl -fu named でエラーがないことを確認しながら進みましょう。–dry-run–debug オプションを追加して実行します。

certbot certonly \
	--dry-run \
	--debug \
  --dns-cloudflare \
  --dns-cloudflare-credentials  ~/.secrets/certbot/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 5 \
  -d example.com \
  -d "*.example.com" 

実行すると、The dry run was successful. と、表示されれば OK です。

[root@centos7 named]# certbot certonly --dry-run --debug   --dns-cloudflare   --dns-cloudflare-credentials  ~/.secrets/certbot/cloudflare.ini   --dns-cloudflare-propagation-seconds 5   -d example.com   -d "*.example.com"   --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-cloudflare, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
dns-01 challenge for example.com
Starting new HTTPS connection (1): api.cloudflare.com
Starting new HTTPS connection (1): api.cloudflare.com
Waiting 5 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
Starting new HTTPS connection (1): api.cloudflare.com
Starting new HTTPS connection (1): api.cloudflare.com

IMPORTANT NOTES:
 - The dry run was successful.
[root@centos7 named]#

発行テストが通れたら Certbot アカウント を登録して 実際のワイルドカード証明書を発行 します。

Certbot アカウントを登録 ( 選択 )

登録済みであれば、スキップしてください。

# メールアドレスをシェアしないで登録する
certbot register --email admin@example.org --agree-tos --no-eff-email

ワイルドカード証明書を発行

–dns-cloudflare-propagation-seconds オプションはデフォルトで 60秒、長いと思ったら調整します。

certbot certonly \
–dns-cloudflare \
–dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
–dns-cloudflare-propagation-seconds 5 \
-d example.com \
-d “*.example.com”

[root@centos7 named]# certbot certonly --dns-cloudflare   --dns-cloudflare-credentials  ~/.secrets/certbot/cloudflare.ini   --dns-cloudflare-propagation-seconds 5   -d example.com   -d "*.example.com"
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-cloudflare, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
dns-01 challenge for example.com
Waiting 5 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2019-09-15. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

[root@centos7 named]#

/etc/letsencrypt/live/ドメイン名 以下に保存されます。

[root@centos7 named]# ls /etc/letsencrypt/live/example.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem  README
[root@centos7 named]#

証明書の更新テスト

Congratulations, all renewals succeeded. と、表示されたら OK です。

[root@centos7 named]# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator dns-cloudflare, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/example.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[root@centos7 named]#

自動更新設定 ( CRON JOBへ登録 )

自動更新をテストしてエラーがなければ CRON JOB へ登録します。

毎日2回(正午、真夜中)更新するように設定

[root@centos7 named]# crontab -e

#下記の内容を追加

0 	0,12 	* 	* 	* 	python -c 'import random; import time; time.sleep(random.random() * 60)' && certbot renew

[root@centos7 named]#

これから https の設定をするなら、こちら をご参考ください。

スポンサーリンク

デバッグ

All authorizations were not finalized by the CA.

  • エラー文:AuthorizationError: All authorizations were not finalized by the CA.
  • 対応:ネームサーバを変更せず、証明書を発行すると発生します。
    メイン登録機関(例:Freenom、onamae.com)へ登録されてあるネームサーバをクラウドフレアのネームサーバに書き換えてください。

LISTENポートを確認する

[root@centos7 named]# netstat -pant | grep -E ':80|:443'
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11501/httpd
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      8998/java
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      11501/httpd
tcp        0      0 123.123.123.10:443       192.0.102.40:44695      TIME_WAIT   -

参考文献

Certbot: Apache on CentOS/RHEL 7
Certbot-dns-cloudflare’s documentation
How does Cloudflare work?

コメント

タイトルとURLをコピーしました