※ Let's Encryptのcertbotを、見よう見まねでも使ったことがある人限定です。
突然ですが、ドメイン登録のvalue-domainはちょっと癖があって、初心者には厳しい感じです。私は海外のバイヤーからeNom経由でドメインを買いたかったこともあって、value-domainを長いこと使っています。小規模なウェブサイトには、value-domainと連携しているXREAを使っています。デジロックがGM○に買われてからは気持ち悪い所もありますが、噂を聞く限りにおいて、お名なんとかよりはずっとマシな気がします (個人の感想です)。
XREAでは、Let's Encryptを用いた無料SSLがチェックボックス一つで有効にできることから、この機能が付いてからは大変便利に使っていました。とあるウェブサイトでも無料SSLを有効にしていたのですが、事情により、さくらのVPSに丸ごと移設することになりました。
ここで悩んだのが、サーバ証明書の移設です。XREAから新サーバに、ウェブ閲覧者に影響を与えないでシームレスに移行できるのでしょうか。
結論を述べると、同じホスト名で新サーバでもLet's Encryptの証明書を使うことはできました。ただし、Let's Encryptの「ドメイン認証」では、新サーバで数分間、不正な証明書の状態になることが避けられませんでした。
「3分間待ってやる……」(古い)
Let's Encryptには「DNS認証」という認証方式もあり、こちらならば、先にサーバ証明書を取得して新サーバに組み込むことで、シームレスな移行が可能になるでしょう (正攻法)。今回は、アクセスがほとんどないサイトであること、DNSの設定をいじっているうちに数分などすぐに過ぎてしまうことから、不幸にも移行中に新サーバにアクセスした人には「ごめんなさい」することにして、ドメイン認証を強行します(ぉぃ
XREAからサーバ証明書を抜き出せるのか?
Let's Encryptで取得したXREA上のサーバ証明書をエクスポートして、新サーバに事前に仕込むことができれば、あとはDNSのレコードを新サーバに向けて少し待つだけで、シームレスに移行できるはずです。
色々と探し回ってみたのですが、残念ながら、XREAでサーバ証明書をエクスポートする機能を見つけることはできませんでした。
同じドメインでLet's Encryptの証明書を取得できるか?
同じホスト名・ドメイン名でLet's Encryptのサーバ証明書を取得できるのでしょうか?重複しているとダメとか、あるのでしょうか?
結果を述べると、問題なく証明書が発行されました。ただし、今回はLet's EncryptのDNS認証ではなくドメイン認証の方を使ったので、DNSのA/AAAAレコードの変更が必要です。
手順
まず、DNSのA/AAAAレコードはXREAの方を向けたまま、TTLだけ最短にしておきます。value-domainで取得したJP汎用ドメインでは初期値が1200秒だったので、20分間ですね。これを120に変更しておきます。
20分以上待たないといけないので、この時間を利用して、新サーバのhttpdやらcertbotやらをきっちり設定しておきます。ついでに、20分後ぐらいに誰もサイトにアクセスしてこないことを天に祈っておきます (オプション)。
(Let's Encryptは初めてですか?……それならDNS認証の方でやった方が無難でしょう)
時間が来たら、A/AAAAレコードを新サーバに向けます。
120秒ちょっと経ったら、Let's Encryptのサーバが新サーバを向いているはずなので、certbotで証明書取得チャレンジ!
# certbot certonly --agree-tos --non-interactive \
# -d <example>.jp --webroot -w /srv/www/htdocs \
# --email piyopiyo@<example>.jp
叩いてみたのはこれだけです。(<example>はもちろんダミー)
うまくいきましたか?……え、だめ? (ムチャしやがって)
(万一うまくいかなかったら、すかさずA/AAAAレコードを元に戻して、この雑ブログのことは忘れて、Let's Encryptについて勉強してください)
取得できた証明書をhttpd等に仕込みます。digやnslookupなどのコマンドを使って、自分の端末が新サーバを向いていることを確認します。移設した(はずの)サイトにアクセスして、正常に閲覧できることを確認します。
TTLの値を元に戻します。
XREAの無料SSLをオフにします。XREA上のドメイン設定は、後日外すのでよいでしょう。
おわり