目次

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

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

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

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

旧サーバーでの作業

fullchain.pemとprivkey.pemの本体を確認

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.pemとprivkey.pemをダウンロード

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

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

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

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

新サーバーでの作業(DNSの設定前)

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

fullchain.pemとprivkey.pemをtmpディレクトリに保存

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などのファイルは削除する

nginxの.confを設定

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を実行

certbot certificates

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

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

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

新サーバーでの作業(DNSの設定後)

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

certbot certonlyを実行(--dry-run)

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

certbot certonlyを実行(本番)

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

certbot certificatesを実行

certbot certificates

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

SSL証明書を確認

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

nginxの.confを修正

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のパスに変更

tmpの古いSSL証明書を削除

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

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