2018年9月20日木曜日

Let's Encryptでワイルドカード証明書を発行&自動更新する

Chrome68から非SSLサイトでは、アドレスバーに「保護されていない通信」と表示されるようになりました。SSL証明書はハードルが高いなーと思っていたところ、少し調べると無料で、なおかつ自動でSSL証明書を発行・更新してくれるLet's Encryptというサイトがありました。
今回は、複数のサブドメインが1つの証明書で利用可能なワイルドカード証明書を取得してみます。
取得するwebサーバはCentOS7.5です。DNSは別サーバのBINDで同じDMZ内にあります。nsupdateが使用できるようにあらかじめnamed.confの該当ゾーンのallow-updateにIPを登録しておき、firewallやUTMの設定をしておきます。今回は面倒なので鍵認証はしません。
certbotというLet's Encryptとの通信クライアントをインストールします。
# yum install --enablerepo=epel certbot -y
Let's Encryptにドメインの管理権があることを証明するために外部から参照できるzoneファイルに一時的に次のようなTXTレコードを書く必要があります。
_acme-challenge.example.com. IN TXT "hogehoge"
nsupdateでTXTレコードを追加できるように次のようなスクリプトを作成しておきます。
certbot-auth.sh
#!/usr/bin/bash
DNSSERVER="dns.example.com"
ZONE="example.com"
TTL=300
printf "server %s\nzone %s.\nupdate add _acme-challenge.%s. %d in TXT \"%s\"\nsend\n" "${DNSSERVER}" "${ZONE}" "${CERTBOT_DOMAIN}" "${TTL}" "${CERTBOT_VALIDATION}" | nsupdate
発行されたら追加したTXTレコードを削除すためのスクリプトを作成しておきます。
certbot-clean.sh
#!/usr/bin/bash
DNSSERVER="dns.example.com"
ZONE="example.com"
TTL=300
printf "server %s\nzone %s.\nupdate delete _acme-challenge.%s. %d in TXT \"%s\"\nsend\n" "${DNSSERVER}" "${ZONE}" "${CERTBOT_DOMAIN}" "${TTL}" "${CERTBOT_VALIDATION}" | nsupdate
証明書が更新された時にapacheを再起動します。
certbot-deploy.sh
#!/usr/bin/bash
systemctl restart httpd
3つのファイルを/usr/local/binに移して、パーミッションを変更して実行できるようにします。
証明書を取得します。
# certbot certonly -n \
  -d *.example.com \
  -m root@example.com \
  --agree-tos \
  --manual-public-ip-logging-ok \
  --manual \
  --preferred-challenges dns \
  --manual-auth-hook /usr/local/bin/certbot-auth.sh \
  --manual-cleanup-hook /usr/local/bin/certbot-clean.sh \
  --deploy-hook /usr/local/bin/certbot-deploy.sh
更新は
$ certbot renew
でOKです。crontab -eで1日1回実行するように登録しておけば、期限切れ1ヵ月前に更新されます。

0 件のコメント:

コメントを投稿

postfix main.cf smtpd_sender_restrictions

最近、メールサーバでキューを確認すると、やたらと???@0000.comへのバウンスメールが溜まっている。 中身を確認すると、PICほにゃららというファイル名で難読化したJavaScriptが添付されているメールです。 何が目的なのか分かりませんが、ごみメール送ってきてバウン...