Let's EncryptのSSL証明書の新しいサーバーへの引っ越し作業

Let's EncryptのSSL証明書の引っ越し作業の記録です。Let's Encryptで作成したSSL証明書を新しいサーバーに引っ越すのですが、その時の手順を公開します。

どのファイルを移動すればよいの?

まず疑問なのは、どのファイルを移動すれば、移行先でcertbotは正しく動くのだろうかということですね。certbotがバージョンアップして、設定ファイルに互換性がない場合などが懸念点です。

Let's EncryptのSSL証明書は、発行制限があって、間違って証明書の要求をし続けると、一定期間取得できなくなるのも、慎重になる理由です。

移行元のディレクトリ構成はこんな感じでした。ドメイン名は「www.myhost.example」に変えてあります。

/etc/letsencrypt
/etc/letsencrypt/renewal-hooks
/etc/letsencrypt/renewal-hooks/post
/etc/letsencrypt/renewal-hooks/deploy
/etc/letsencrypt/renewal-hooks/pre
/etc/letsencrypt/archive
/etc/letsencrypt/archive/www.myhost.example
/etc/letsencrypt/archive/www.myhost.example/chain2.pem
/etc/letsencrypt/archive/www.myhost.example/cert1.pem
/etc/letsencrypt/archive/www.myhost.example/chain1.pem
/etc/letsencrypt/archive/www.myhost.example/fullchain3.pem
/etc/letsencrypt/archive/www.myhost.example/fullchain1.pem
/etc/letsencrypt/archive/www.myhost.example/chain4.pem
/etc/letsencrypt/archive/www.myhost.example/privkey3.pem
/etc/letsencrypt/archive/www.myhost.example/privkey2.pem
/etc/letsencrypt/archive/www.myhost.example/cert3.pem
/etc/letsencrypt/archive/www.myhost.example/fullchain4.pem
/etc/letsencrypt/archive/www.myhost.example/chain3.pem
/etc/letsencrypt/archive/www.myhost.example/cert4.pem
/etc/letsencrypt/archive/www.myhost.example/privkey1.pem
/etc/letsencrypt/archive/www.myhost.example/fullchain2.pem
/etc/letsencrypt/archive/www.myhost.example/cert2.pem
/etc/letsencrypt/archive/www.myhost.example/privkey4.pem
/etc/letsencrypt/.updated-options-ssl-apache-conf-digest.txt
/etc/letsencrypt/csr
/etc/letsencrypt/csr/0147_csr-certbot.pem
/etc/letsencrypt/csr/0173_csr-certbot.pem
/etc/letsencrypt/csr/0241_csr-certbot.pem
/etc/letsencrypt/csr/0026_csr-certbot.pem
/etc/letsencrypt/csr/0049_csr-certbot.pem
/etc/letsencrypt/csr/0252_csr-certbot.pem
/etc/letsencrypt/csr/0243_csr-certbot.pem
/etc/letsencrypt/accounts
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/32d2139cf78454841dbfafc66f94f9c9
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/32d2139cf78454841dbfafc66f94f9c9/regr.json
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/32d2139cf78454841dbfafc66f94f9c9/meta.json
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/32d2139cf78454841dbfafc66f94f9c9/private_key.json
/etc/letsencrypt/keys
/etc/letsencrypt/keys/0045_key-certbot.pem
/etc/letsencrypt/keys/0139_key-certbot.pem
/etc/letsencrypt/keys/0002_key-certbot.pem
/etc/letsencrypt/keys/0152_key-certbot.pem
/etc/letsencrypt/live
/etc/letsencrypt/live/www.myhost.example
/etc/letsencrypt/live/www.myhost.example/privkey.pem
/etc/letsencrypt/live/www.myhost.example/README
/etc/letsencrypt/live/www.myhost.example/chain.pem
/etc/letsencrypt/live/www.myhost.example/cert.pem
/etc/letsencrypt/live/www.myhost.example/fullchain.pem
/etc/letsencrypt/live/www.ganeshiaru.co.jp
/etc/letsencrypt/options-ssl-apache.conf
/etc/letsencrypt/renewal
/etc/letsencrypt/renewal/www.myhost.example.conf

certbotのバージョンは1.0.0です。

certbot --version
certbot 1.0.0

移行先のcertbotのバージョンは「0.27.0」です。なんで、バージョンが下がっているのだろうか???

certbot --version
certbot 0.27.0

必要なもの、必要がないもの

「options-ssl-apache.conf」は、ApacheにおけるSSLの証明書の自動設定用のものだけれど、手動で設定することにしたので、これは、いらない。

「renewal-hooks」は空だからいらない。

Apacheから読み込むSSL証明書のことだけを考えると「live」ディレクトリ以下のSSL証明書を移動してくればよいはず。

問題は、Let's Encryptが、更新を正しくしてくれるためには、どの情報が必要かということだね。

どうやら、Let's EncryptのドメインごとのSSL証明書の更新のための設定ファイルは「/etc/letsencrypt/renewal」の中にあるようだ。引っ越しに必要そうだ。

Let's Encryptのアカウント情報は「/etc/letsencrypt/accounts/etc/letsencrypt/accounts」の中にあるようだ。引っ越しに必要そうだ。

「/etc/letsencrypt/archive」の中には、過去からのすべてのLet's EncryptのSSL証明書の情報があるようです。この証明書情報は、liveディレクトリの中から参照されています。これは、必要だ。

「/etc/letsencrypt/csr」と「/etc/letsencrypt/keys」は、バックアップ用だけに存在しているようです。これは、いらなさそう。

というわけで、そのまま全部移動するのが、無難なようです。

Let's EncryptのSSL証明書の引っ越しに必要なもの

Let's EncryptのSSL証明書の引っ越しに必要なもの。「/etc/letsencrypt」以下をすべて移動させましょう。

  • /etc/letsencrypt

root権限で移動しないといけない

「/etc/letsencrypt」ディレクトリは、root権限で移動しないといけないので、必要なものを「sudo tar cfv」でtar.gzに固めて、移行先に移動して、「sudo tar xfv」展開という手順を踏む。

rootログイン禁止しているので、rsyncでは、移動ができない。

移動元での作業

tarで固めて、アプリケーションユーザーのホームディレクトリに移動。すぐに消せるように、所有者もアプリケーションユーザーに変更しておく。

cd /etc
sudo tar cfv letsencrypt.tar.gz letsencrypt
sudo chown myapp letsencrypt.tar.gz
sudo mv letsencrypt.tar.gz /home/myapp/

参考: sudo, cd, tar, chown, mv

引っ越し先のアプリケーションユーザーのホームディレクトリに移動する。

移動先での作業

展開して、rsyncでコピーして、再帰的に所有者をrootに変更。

cd ~
tar xfv letsencrypt.tar.gz
sudo rsync -av letsencrypt/ /etc/letsencrypt/
sudo chown -R root:root /etc/letsencrypt/

上記で記述した、不必要なファイルは、消す。消さなくっても、そのままにしておいてもよいが。

renewalディレクトリの中の設定ファイルのwebroot_mapのチェック

引っ越し作業をしたときに、ユーザー名が変更されている場合などは、renewalディレクトリの中の設定ファイルに記述されているパスの更新が必要です。

[[webroot_map]]
www.myhost.example = /home/myapp/fooapp/public
Perlテキスト処理のエッセンス
  • 初級者向け・テキスト処理と正規表現の基本をマスター
業務に役立つPerl
  • 実務者向け・ログ解析など日本語を含むテキスト処理の実践!
Perlクラブ
  • 仲間と出会い
    ゆとりあるエンジニアライフを送る