勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

サーバ移行の際に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サーバのインストール」まで対応したと想定する。

AlmaLinux8.6にLAMP環境&WordPressを構築する方法

対応方法

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によるSSL事前認証・設定方法

 - サーバー

  関連記事

CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築

先日KAGOYAのVPSからIndigoに移行した際にCentOS6から7へバー ...

CentOS6系から7系に(KAGOYAからIndigoに)移行した際のメモ

CentOS6系から7系に、さらにKAGOYAのVPSからWebARENA In ...

AlmaLinux8.6にLAMP環境&WordPressを構築する方法

だいぶ前にCentOS6系から7系に移行したが、7系も2024/6/30にサポー ...

Nginxのバーチャルホスト設定とLet's Encryptの導入

NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...

VPSに無料SSLのLet's Encryptを導入

SSLといえば有料という認識だったが、無料のものも出てきているという話を聞いた。 ...