⚠️ 記事内に広告を含みます。

Certbotでstandaloneからwebrootに切り替える方法

certbotの更新時のオプションをstandaloneからwebrootに切り替えるには/etc/letsencrypt/renewalのconfでstandaloneからwebrootに設定を書き換える

certbotの更新設定はrenewal配下のconfファイルに記述する

certbotで更新する時に下記のエラーが出力される

Simulating renewal of an existing certificate for example.com
Performing the following challenges:
http-01 challenge for example.com
Cleaning up challenges
Failed to renew certificate example.com with error: Problem binding to port 80: Could not bind to IPv4 or IPv6.

上記のエラーはcertbotの更新サーバ上で80ポートを別のプログラムが利用中なので実行できないという内容です。

certbotはstandaloneモードでは認証用のwebサーバを80ポートにあげるからです。

実際にnetstatでポートを確認するとnginxが80ポートを利用中です。

# netstat -ltnp | grep  "tcp\s.*80\s"
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14946/nginx: master

更新する方法は以下2つの方法があります。

  1. 80ポートを使用しているアプリケーションを停止してからcertbot renewする
  2. standaloneモードではなく80ポートを利用しているwebサーバ上で認証する

renewalのconfファイルでwebrootに切り替える

80ポートを利用しているアプリケーション上で認証の設定が可能ならwebrootモードに切り替えれば認証できます。

standaloneモードになっている場合は設定ファイルでwebrootに切り替えます。

ファイルは{更新したいドメイン名}.confという名前になっています。

# vim /etc/letsencrypt/renewal/example.com.conf

#[renewalparams]
#authenticator = standalone
#account = {acountの文字列が記載}
#manual_public_ip_logging_ok = None
#server = https://acme-v02.api.letsencrypt.org/directory

↓上の設定内容をコメントアウトして下の設定に書き換える

[renewalparams]
authenticator = webroot
account = {acountの文字列が記載}
manual_public_ip_logging_ok = None
server = https://acme-v02.api.letsencrypt.org/directory
webroot_path = /var/www/html,
[[webroot_map]]
example.com = /var/www/html

webfoot_pathは更新したいドメインの現在のドキュメントルートかまたは認証用のディレクトリを設定します。上記の例ではexample.comのドキュメントルート/var/www/example.com/htdocsとは別のディレクトリを指定しています。

ドキュメントルートとは別のディレクトリをを指定しているのでconfファイルに設定を追記します。

・nginxの場合

## Let'sEncryot authentication
    location /.well-known/acme-challenge {
        index  index.php index.html index.htm;
        root /var/www/html/;
    }

認証パスは.well-known/acme-challengeです。

locationでhttp://example.com/.well-known/acme-challengeにアクセスが来たときには/var/www/htmlを利用するように設定します。(他の設定によっては記述する内容や位置が異なる)

設定変更後にリロードしたらcertbot renewで更新できるか確認

# certbot renew --dry-run
→dryrunで確認して問題なければ実行する

# cerbot renew 

更新時にドメインを指定したい場合は–cert-nameで指定する

Let’sEncryptで一部の証明書のみを更新する方法

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です