サーバー移転時にcertbot(Let's Encrypt)のSSL証明書を移行する方法

新サーバーでcertbot certonlyコマンドを使いSSL証明書を発行したい

しかし、DNSを切り替えるまでは、新サーバーでcertbot certonlyが使えない

そこで、旧サーバーから新サーバーへSSL証明書の移行作業が必要になる

cd /etc/letsencrypt/live/example.com
ls -la
実行結果
lrwxrwxrwx 1 root root  42  7月  1 18:28 cert.pem -> ../../archive/example.com/cert1.pem
lrwxrwxrwx 1 root root  43  7月  1 18:28 chain.pem -> ../../archive/example.com/chain1.pem
lrwxrwxrwx 1 root root  47  7月  1 18:28 fullchain.pem -> ../../archive/example.com/fullchain1.pem
lrwxrwxrwx 1 root root  45  7月  1 18:28 privkey.pem -> ../../archive/example.com/privkey1.pem

fullchain.pemはただのシンボリックリンクで、本体は
../../archive/example.com/fullchain1.pem
つまり
/etc/letsencrypt/archive/example.com/fullchain1.pem
というパスに存在することがわかる

privkey.pemはただのシンボリックリンクで、本体は
../../archive/example.com/privkey1.pem
つまり
/etc/letsencrypt/archive/example.com/privkey1.pem
というパスに存在することがわかる

fullchain1.pemなのかfullchain2.pemなのか、数字の部分は環境によって変わる
(certbot renewのたびに連番が増えていく)

fullchain.pemprivkey.pemの本体ファイルをffftpなどでローカルに保存しておき、あとで新サーバーにファイルをアップロードする

FTPでファイル転送するときのコツ

レスポンス: 550 Failed to change directory.
エラー: ディレクトリ リスト表示の取り出しに失敗しました

のようなエラーが出てファイルのダウンロードができない場合は下記を参照
FTPでファイル転送するときのコツ

fullchain.pemprivkey.pemをサーバーにアップロード

cd /home/user1
mkdir tmp
mv fullchain1.pem tmp
mv privkey1.pem tmp

/home/user1/tmpディレクトリを作成

旧サーバーで取得したfullchain.pemprivkey.pemtmpディレクトリに保管

DNSの設定が完了してcertbotコマンドが使えるようになったら、tmpディレクトリとその中に置いたfullchain.pemprivkey.pemなどのファイルは削除する

example.com.conf
    ssl_certificate      /home/user1/tmp/fullchain1.pem;
    ssl_certificate_key  /home/user1/tmp/privkey1.pem;

ssl_certificatessl_certificate_keyに旧サーバーからコピーしてきたfullchain.pemprivkey.pemのパスを設定

WordPressなりDokuWikiなりのデータを正常に移行して、nginxの設定が適切に行われていれば
ssl_certificatessl_certificate_keyに旧サーバーから持ってきた証明書を指定するだけで正常に稼働する

certbot certificates

新サーバーで管理中のSSL証明書の一覧を表示

fullchain.pemprivkey.pemを手動で移設しても、certbot certificatesの一覧にドメインは表示されない

このままでは、certbot renewをしても、証明書の自動更新の対象外

旧サーバーからコピーしてきたSSL証明書は一時的なものなので
お名前.comなどでDNSの設定を変更し、ドメインのAレコードが旧サーバーから新サーバーへ切り替わったら、新サーバーにて新たにSSL証明書を発行する

certbot certonly --webroot -w /home/user1/Dokuwiki/xxx -d example.com --email admin@example.com  --dry-run
certbot certonly --webroot -w /home/user1/Dokuwiki/xxx -d example.com --email admin@example.com
certbot certificates

certbotで管理中のSSL証明書の一覧を表示
example.comが管理対象に追加されたことを確認

以下のディレクトリに関連ファイルが生成されていることを確認

  • /etc/letsencrypt/archive
  • /etc/letsencrypt/live
  • /etc/letsencrypt/renewal
example.com.conf
  ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

ssl_certificatesl_certificate_keyの値を
旧サーバーから移転したfullchain.pemprivkey.pemのパスから
新サーバーのcertbot certonlyコマンドで発行したfullchain.pemprivkey.pemのパスに変更

certbot certonlyで新しいSSL証明書の発行が完了後
/home/user1/tmpfullchain.pemprivkey.pemは削除する

あとは、crontabcertbot renewを登録するなど、通常のサーバー運営の要領で管理すればOK

  • 最終更新: 2023/05/20 10:22