Let's EncryptでワイルドカードのSSL証明書を発行する

このあいだConoHa VPSでつくったUbuntu 22.04が動くサーバーに独自ドメイン dev.shikakun.com でアクセスできるようにしてLet's EncryptでSSL証明書を発行したのだけど、サブドメイン以下のワイルドカード証明書というのはないらしく、サブドメインを用意するたびにSSL証明書を発行しないといけないし、それぞれ3ヶ月ごとに更新しないといけないのはめんどう。そこで、ルートドメインとして新たに shikakun.dev を取得して、ワイルドカード証明書ひとつで運用できるようにしたい。

これまでのあらすじは以下の記事を参照ください。

ドメインの取得・ネームサーバーの設定

今回はドメインをムームードメインで取得して、ネームサーバーはCloudflareを利用しました。

ムームードメインで取得完了後にDNSを利用しない選択肢を選び、Cloudflareにログインして「サイトを追加」から shikakun.dev を追加、表示される案内に従ってムームードメインの管理画面でネームサーバーの設定を abby.ns.cloudflare.com phil.ns.cloudflare.com へ差し替える。しばらくするとCloudflareから、確認できたよ〜というメールが届いた。

ドメインでアクセスできるようにする

sudo mkdir /var/www/shikakun.dev
sudo chown -R $USER:$USER /var/www/shikakun.dev
sudo vim /etc/apache2/sites-available/shikakun.dev.conf
<VirtualHost *:80>
  ServerName shikakun.dev
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/shikakun.dev
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
sudo a2ensite shikakun.dev
systemctl reload apache2

これで http://shikakun.dev/ でアクセスできるようになった(なお、 .dev.app のTLDはChromeからアクセスしようとするとhttpsへリダイレクトされるが、まだSSL証明書を発行していないのでアクセスできない。FirefoxなどChrome以外のブラウザで確認しました)。

certbotでLet's EncryptのSSL証明書を発行し、apache2の設定ファイルを書き換える。

sudo certbot certonly --webroot --webroot-path /var/www/shikakun.dev -d shikakun.dev -m {メールアドレス}
sudo vim /etc/apache2/sites-available/shikakun.dev.conf
<VirtualHost *:443>
  ServerName shikakun.dev
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/shikakun.dev
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  SSLCertificateFile /etc/letsencrypt/live/shikakun.dev/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/shikakun.dev/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/shikakun.dev/chain.pem
</VirtualHost>
sudo systemctl reload apache2

これで https://shikakun.dev/ でアクセスできるようになった!

ワイルドカード証明書に差し替える

いよいよLet's Encryptでワイルドカード証明書を発行して、さきほど発行した証明書から差し替える。

sudo certbot certonly --manual \
    --preferred-challenges dns-01 \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -m {メールアドレス} \
    -d shikakun.dev \
    -d *.shikakun.dev

上書きするか尋ねられるので Expand の E を入力。

ワイルドカード証明書はDNS認証をする必要があるらしく、案内されたとおりにCloudflareのDNSの設定でTXTレコードに指定の値を入力。反映されたかな〜くらい待ってEnterを押すと、無事に差し替えられた!

3ヶ月に1度の更新が必要で、上記のcertbotのコマンドを実行すればいいらしい。また、更新にあたってTXTレコードの値を差し替える必要があるとのこと。めんどくさい!けど、たぶんきっと調べればなんかいい方法あるでしょう。