Let’s encrypt を開発環境などの別サーバで手動取得する

Let’s encryptが入っていない非セキュアな古いサーバから、Let’s encryptを導入する新サーバへ移行するケースで必要になりました。

旧環境を稼働させつつ、同一ドメインでテストを兼ねながら新環境を作っていく必要があります。そのため、新環境から自動取得を行う際のhttpプロトコルでの認証では、現状の旧環境へアクセスされてしまい、認証エラーになります。

そのため、この手順で作業を行う事にしました。

新環境から手動で証明書を取得

このコマンドで手動取得を行います。

certbot certonly \
  --manual \
  --preferred-challenges dns \
  -d [ドメインです] \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --register-unsafely-without-email

このコマンドで手動取得を行います。dnsでchallengesするのがポイントですね。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

新環境から取得された旨、IPアドレスがログに残りますがいいですか?
もちろんです。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.[ドメインです] with the following value:

p_KYy**********************************************2my5-zuk

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

DNSのテキストレコードに上記のキーを追加してあげてから、エンター。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/[ドメインです]/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/[ドメインです]/privkey.pem
   Your cert will expire on 2021-09-26. To obtain a new or tweaked

取得できました。上記の liveフォルダに証明書が格納されています。

アパッチにもSSL環境を手動で設定

sudo vi /etc/apache2/sites-available/[ドメインです]-le-ssl.conf 

で新規ファイルに、

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName [ドメインです]
    ServerAlias www.[ドメインです]
    ServerAdmin info@[ドメインです]

    DocumentRoot /var/www/[ドメインです]
    ErrorLog ${APACHE_LOG_DIR}/error.[ドメインです].log
    CustomLog ${APACHE_LOG_DIR}/access.[ドメインです].log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/[ドメインです]/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[ドメインです]/privkey.pem
</VirtualHost>
</IfModule>

こんな感じでSSL用の設定を書き込みます。

sudo a2enmod ssl

sslを有効にして

sudo a2ensite [ドメインです]-le-ssl

先程の設定ファイル名でドメインを追加し、

systemctl restart apache2

apacheを再起動。

WEBアクセスでテスト

クライアントのhostsファイルなどでドメインと新環境のIPアドレスを紐付けてから、

https://[ドメインです]

にアクセスすると、無事表示されました。

これで3ヶ月の有効期限で証明書が手に入りました。

メールサーバなどにもこの証明書を使っていきます。

新環境に移行後に

忘れては行けないのが、新環境への移行後、あらためて証明書を新規取得するなど、httpプロトコルでの認証と自動更新を必ずオンにする事です。

これを忘れると証明書の期限切れが発生しちゃうことに……怖い怖い。