サーバー移転時に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