サーバ移行の際にLet’s EncryptをDNS認証で対応する方法
近々CentOS7系からAlmaLinux8系への移行(サーバも移行)を検討しているが、本番用ドメインのLet's Encrypt対応について考慮していなかった。通常のHTTP認証だとDNSが切り替わるまでSSLが導入できない筈。調べたところDNS認証を用いることで解決できる模様。以下に対応方法をメモ。
目次
背景
旧サーバ(CentOS7系)から新サーバ(AlmaLinux8系)に移行したい。AlmaLinux8系へのLAMP環境&WordPress&FTPサーバ構築は以前に予行演習したが、その際のLet's Encrypt導入は適当なサブドメインを発行してそちらに対して割り当てていた。
ただ、本番用ドメインは旧サーバに割り当てられているため、新サーバでHTTP認証を用いてLet's Encryptを導入しようとするとエラーが出る筈。
かといってDNSが完全に切り替わるまで待つとなると「新サーバ側にアクセスしたユーザはブラウザで潜在的なセキュリティリスクあり的なアラートが表示される」「旧サーバ側にアクセスしたユーザは問題無し」とよくわからない状況になりそう。
何とかならないか調べたところ「サーバー証明書ごと新サーバに移行」「DNS認証を用いて証明書を発行」の2つの方法があり、今回は後者の方を試してみたい。
事前準備
サーバ構築について
サーバ構築に関しては以下過去記事の「FTPサーバのインストール」まで対応したと想定する。
対応方法
certbotのインストールとDNS認証のリクエストまで
サーバにSSH接続し以下の通り進める。
#SSL関連のパッケージとcertbotをインストール yum -y install openssl mod_ssl epel-release certbot #DNS認証のリクエスト certbot certonly --manual --domain 【ドメイン】 --email 【メールアドレス】 --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns #以下メッセージが表示される Please deploy a DNS TXT record under the name: _acme-challenge.【ドメイン】 with the following value: 【ワンタイムトークン】
ネームサーバー設定
ネームサーバーで以下のように設定する(ムームードメインの場合)。
- サブドメイン→「_acme-challenge」
- 種別→「TXT」
- 内容→「ワンタイムトークン」
設定完了後、数分ほどで反映される筈。尚、certbotからのメッセージにも表示されるが以下ページを開くことで反映されているか確認できる。
https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.【ドメイン】
SSL証明書取得
ネームサーバー設定が反映されたらSSHクライアントソフトに戻りエンターキーを押すと証明書が取得できる。
尚、ネームサーバが切り替わっていない等でエラーが発生した場合は再度DNS認証のリクエストを行う(異なるワンタイムトークンが発行されるため)。
バーチャルホスト設定
#ディレクトリ移動 cd /etc/httpd/conf.d #設定ファイルのバックアップ(日付部分は適宜変更) cp virtual.conf virtual.conf.【日付】 #設定ファイルを開く vi virtual.conf 設定ファイルでは以下内容を追記する(xxxx.com部分は適宜変更)。 <VirtualHost *:80> ServerAdmin xxxx.com DocumentRoot /var/www/html/xxxx.com ServerName xxxx.com ErrorLog logs/error_log CustomLog logs/access_log common </VirtualHost> <VirtualHost *:443> ServerAdmin xxxx.com DocumentRoot /var/www/html/xxxx.com ServerName xxxx.com ErrorLog logs/error_log CustomLog logs/access_log common SSLEngine on SSLCertificateFile /etc/letsencrypt/live/xxxx.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/xxxx.com/privkey.pem NameVirtualhost *:443 </VirtualHost>
「:wq」で上書き保存し、以下でapacheを再起動する。
#apacheの再起動 systemctl restart httpd
この時点でブラウザからhttps接続が確認できる筈。
所感
当サイトは個人運営なのでDNSが切り替わってから新サーバでSSL証明書を導入する形でも特に問題は無いんだけど、実案件でサーバ移行に伴うLet's Encrypt設定とかも無いとは言えないので今回の方法を試してみた。
この辺りレンタルサーバ間(Xサーバ→カゴヤ)とかだと特に気にせずSSLも引き継げていたように思うんだけど、内部でどのように対応しているのか知りたいところ。
参考サイト
関連記事
-
Let's Encryptの自動更新時「Failed to renew certificate~」エラーの対応方法
CentOSからAlmaLinuxに移行後、初めてのLet's Encrypt更 ...
-
Nginxのバーチャルホスト設定とLet's Encryptの導入
NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...
-
CentOS6系から7系に(KAGOYAからIndigoに)移行した際のメモ
CentOS6系から7系に、さらにKAGOYAのVPSからWebARENA In ...
-
CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築
先日KAGOYAのVPSからIndigoに移行した際にCentOS6から7へバー ...
-
VPSに無料SSLのLet's Encryptを導入
SSLといえば有料という認識だったが、無料のものも出てきているという話を聞いた。 ...