snap版でLet’s Encrypt自動更新がエラーになる

無料のSSLサーバー証明書であるLet’s Encryptは、米国の非営利団体であるISRG(Internet Security Research Group)により運営されています。
当サイトでもLet’s Encrypt利用させていただいてSSLを構築していますが、インストールに関しては他のサイトを参考にして下さい。

snap版でLet’s Encryptをインストールすると自動更新のプログラムもインストールされ、90日になる前に自動更新されます(設定は必要)

さて、先日からメールソフトで自宅メールサーバーのSSL証明書の期限が切れる旨の表示が出ます。
調べてみるとHTTP(apache) のSSL証明書の更新は出来ているのに、メール(postfix,dovecot) のSSL証明鍵の更新ができていません。

そこで、手動で証明書の更新を–dry-runオプションを付けてシュミレーションしてみます。

root# certbot renew --dry-run

Processing /etc/letsencrypt/renewal/mailxxxxxxxxx.conf
-------------------------------------------------------
error: Could not bind TCP port 80 because it is already in use by another process on this system (such as a web server). Please stop the program in question and then try again.

#TCP ポート 80 は、このシステム上の別のプロセス (Web サーバーなど) によってすでに使用されているため、バインドできませんでした。問題のプログラムを停止してから、もう一度試してくださいとのエラーメッセージでメールSSL証明書の更新が出来ません。

#tcp port:80で使っているサービスを確認します。
root# lsof -i tcp:80
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1248346 apache    4u  IPv6 907497      0t0  TCP *:http (LISTEN)

#apacheが tcp port:80を使っているのでapacheを停止して手動更新してみます。
root# systemctl stop httpd
root# certbot renew --dry-run
Congratulations, all simulated renewals succeeded:
root# systemctl restart httpd

#Congratulations, all simulated renewals succeeded:との事でapacheを停止すれば手動でSSL証明鍵の更新はできましたが、90日おきにこの作業をするのは面倒です。

エラーを出しているメールの自動更新configfile と自動更新できているwebサイト(apache) のconfigfileを見比べてみます。

エラーになるメールの自動更新configfile。
root# vi /etc/letsencrypt/renewal/mail.xxxxxx.com.conf
[renewalparams]
account = axxxxxxxxxxxxxxxxxx
authenticator = standalone
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa

#自動更新出来ているwebサイトのconfigfile。
[renewalparams]
account = abxxxxxxxxxxxxxxxx
authenticator = apache
installer = apache
server = https://acme-v02.api.letsencrypt.org/directory
key_type = rsa

#メールの自動更新configfileでの authenticator = standalone は外部に接続しないで独立で動作させるとの意味ですかね?そこで、authenticator をwebサイトと同じ様に変更してみます。
#authenticator = standalone
authenticator = apache

メールの自動更新configfileでの authenticatorをapacheに変更して、再度手動で証明書の更新を–dry-runオプションを付けてシュミレーションしてみます。

root# vi /etc/letsencrypt/renewal/mail.xxxxxx.com.conf
[renewalparams]
account = axxxxxxxxxxxxxxxxxx
authenticator = apache
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa

root# certbot renew --dry-run
Congratulations, all simulated renewals succeeded:

#手動で証明書の更新が成功したので、自動更新プログラムでも更新できるはずです。