サーバー移転時に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.pemとprivkey.pemの本体ファイルをffftpなどでローカルに保存しておき、あとで新サーバーにファイルをアップロードする
FTPでファイル転送するときのコツ
レスポンス: 550 Failed to change directory.
エラー: ディレクトリ リスト表示の取り出しに失敗しました
のようなエラーが出てファイルのダウンロードができない場合は下記を参照
FTPでファイル転送するときのコツ
新サーバーでの作業(DNSの設定前)
fullchain.pemとprivkey.pemをサーバーにアップロード
fullchain.pemとprivkey.pemをtmpディレクトリに保存
cd /home/user1 mkdir tmp mv fullchain1.pem tmp mv privkey1.pem tmp
/home/user1/tmpディレクトリを作成
旧サーバーで取得したfullchain.pemとprivkey.pemをtmpディレクトリに保管
DNSの設定が完了してcertbotコマンドが使えるようになったら、tmpディレクトリとその中に置いたfullchain.pemとprivkey.pemなどのファイルは削除する
nginxの.confを設定
- example.com.conf
ssl_certificate /home/user1/tmp/fullchain1.pem; ssl_certificate_key /home/user1/tmp/privkey1.pem;
ssl_certificateとssl_certificate_keyに旧サーバーからコピーしてきたfullchain.pemとprivkey.pemのパスを設定
WordPressなりDokuWikiなりのデータを正常に移行して、nginxの設定が適切に行われていれば
ssl_certificateとssl_certificate_keyに旧サーバーから持ってきた証明書を指定するだけで正常に稼働する
certbot certificatesを実行
certbot certificates
新サーバーで管理中のSSL証明書の一覧を表示
fullchain.pemとprivkey.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証明書を確認
以下のディレクトリに関連ファイルが生成されていることを確認
- /etc/letsencrypt/archive
- /etc/letsencrypt/live
- /etc/letsencrypt/renewal
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_certificateとsl_certificate_keyの値を
旧サーバーから移転したfullchain.pemとprivkey.pemのパスから
新サーバーのcertbot certonlyコマンドで発行したfullchain.pemとprivkey.pemのパスに変更
tmpの古いSSL証明書を削除
certbot certonlyで新しいSSL証明書の発行が完了後
/home/user1/tmpのfullchain.pemとprivkey.pemは削除する
あとは、crontabにcertbot renewを登録するなど、通常のサーバー運営の要領で管理すればOK