そもそもマルチドメイン証明書を利用していたのは、postfixがTLS SNIに対応していなかった(と誤って認識していた。その時点でpostfixはSNIに対応済)ためであった。これをシングルドメインのサーバ証明書に変更してみる。
ここでは、証明書の失効~新規取得処理までを記載する。
証明書失効処理
Let’s Encrypt 公式のrevokeのページを読んでおく。
上記のページには、「もともと自分で証明書を発行し、現在でも発行に使用したアカウントがコントロール下にある場合、そのアカウントを使って証明書を失効できます。」とある。
現在発行に使用したアカウントはもちろんコントロール下にあるのでこの方法を利用できる。
証明書の確認
失効処理を行う前に証明書の確認を行う。
# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: example.com
Serial Number: 1
Key Type: ECDSA
Domains: example.com *.example.com *.example.net example.net
Expiry Date: 2024-06-08 16:54:01+00:00 (VALID: 62 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
revokeコマンドの実行
以下のコマンドを実行する。
certbot revoke --cert-path /etc/letsencrypt/archive/example.com/cert1.pem --reason keycompromise
上記の指定するファイル「cert1.pem」の番号部分は実際に存在するものの中で一番大きい番号を指定すればいいだろう。
証明書の作成
ドメインexample.comの証明書作成用スクリプト。
#!/bin/sh
certbot certonly --manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns \
-d *.example.com -d example.com \
-m info@example.com \
--agree-tos \
--manual-public-ip-logging-ok
上記のシェルを実行する。ここで証明書をはじめて取得する場合は、DNSへ登録する情報が出力されるのだが、今回はでなかった。
# sh 01-certbot-certonly-example.com.sh
Use of --manual-public-ip-logging-ok is deprecated.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for *.example.com and example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2024-07-06.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
つづいて、example.net用証明書の作成スクリプト。
#!/bin/sh
certbot certonly --manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns \
-d *.example.net -d example.net \
-m info@example.net \
--agree-tos \
--manual-public-ip-logging-ok
実行する。
# sh -x 02-certbot-certonly-example.net.sh
+ certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges dns -d '*.example.net' -d example.net -m info@example.net --agree-tos --manual-public-ip-logging-ok
Use of --manual-public-ip-logging-ok is deprecated.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for *.example.net and example.net
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.net/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.net/privkey.pem
This certificate expires on 2024-07-06.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
証明書の確認
次のようにわかれていればOK。
# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: example.com
Serial Number: 1
Key Type: ECDSA
Domains: *.example.com example.com
Expiry Date: 2024-07-06 10:56:09+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
Certificate Name: example.net
Serial Number: 1
Key Type: ECDSA
Domains: *.example.net example.net
Expiry Date: 2024-07-06 10:52:03+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.net/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.net/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
更新スクリプト
systemctl timerでcertbotの更新を行っているが、これは変更せずにそのまま利用可能みたい。
アプリケーションの設定変更
apache/nginx
apache/nginxは証明書のパスを変更して再起動するだけ。
postfix/dovecot
postfix/dovecotは別記事に記載する。
バックアップ/リストアスクリプト
マルチドメイン証明書ではバックアップするディレクトリは一か所であったが、今回はドメイン毎にバックアップ・リストアを行う。
コメント