背景
certbot で作成された証明書が保存されている /etc/letsencrypt
配下の各種ファイル・ディレクトリの内容をちゃんと理解していなかったので。
ファイル・ディレクトリ階層
- 証明書取得対象のドメイン名を
www.example.com
とする。 - 証明書を発行して、まだ一度も更新していない場合とする。
/etc/letsencrypt
├── accounts
│ └── acme-v02.api.letsencrypt.org
│ └── directory
│ └── <md5 ハッシュ値>
│ ├── meta.json
│ ├── private_key.json
│ └── regr.json
├── archive
│ └── www.example.com
│ ├── cert1.pem
│ ├── chain1.pem
│ ├── fullchain1.pem
│ └── privkey1.pem
├── live
│ ├── README
│ └── <ドメイン名>
│ ├── README
│ ├── cert.pem -> ../../archive/www.example.com/cert1.pem
│ ├── chain.pem -> ../../archive/www.example.com/chain1.pem
│ ├── fullchain.pem -> ../../archive/www.example.com/fullchain1.pem
│ └── privkey.pem -> ../../archive/www.example.com/privkey1.pem
├── renewal
│ └── www.example.com.conf
└── renewal-hooks
├── deploy
├── post
└── pre
/etc/letsencrypt/accounts
Let's Encrypt のアカウントに関する情報が保存される。
-
meta.json
: アカウント作成の日時と、アカウント作成を実行したホスト名が記載されているファイル。 -
private_key.json
: certbotがACMEサーバーと通信する際に利用する JSON Web Key(JWK) 形式のキーのファイル。 -
regr.json
: アカウントのURIが記載されたファイル。
/etc/letsencrypt/live
certbotが作成した証明書が配置されるディレクトリである。
ドメイン別のディレクトリが作成され、その中に証明書が配置される。
実際には /etc/letsencrypt/archive
配下の証明書へのシンボリックリンクとなっており、証明書更新の度にシンボリックリンクが更新される。
/etc/letsencrypt/archive
これまでに作成した証明書全ての実体が配置される。
live
ディレクトリと同様に、ドメイン別のディレクトリが作成され、その中に証明書が配置される。
証明書更新の度に、ファイル末尾の数字がインクリメントされた証明書が作成される。(例:cert1.pem
→cert2.pem
)
過去分の証明書はそのまま残る。
/etc/letsencrypt/renewal
certbotが証明書更新の際に参照する更新設定ファイル <ドメイン名>.conf
が配置される。
/etc/letsencrypt/renewal-hooks
pre
,post
,deploy
配下のディレクトリに実行ファイルを置くことで、renew
サブコマンドによる証明書更新時に任意の処理を実行することができる。
-
pre
に配置した場合: 証明書更新処理を始める前に実行される。 -
post
に配置した場合: 証明書更新処理が終わった後に実行される。 -
deploy
に配置した場合: 正常に証明書が更新された場合、更新された証明書毎に実行される。(2つ更新された場合、それぞれで1回、計2回実行される。)
各ディレクトリ配下のファイルは、アルファベット順に実行されるらしい。
参考:https://eff-certbot.readthedocs.io/en/stable/using.html#renewing-certificates