Let's EncryptのSSL証明書をDNS認証で発行してみた。(DNSはお名前.com)


はじめに

Google Cloud Platform (GCP) の Google Compute Engine ( GCE )インスタンスを使用して、Let's EncryptのSSL証明書の発行を、WEBサーバを構築せずにDNS認証で行ってみた自分の備簿録を兼ねた投稿です。ドメインはお名前.comで取得しました。

1.GCE インスタンスを作成する

本記事では、CentOS7を選択しました。インスタンス作成方法は省略します。
GCP公式サイトに記載されています。

2.外部IPアドレスを静的にする

外部IPアドレスをエフェメラルから静的に変更します。DNSサーバに登録しますので、静的IPアドレスにします。

3.ドメインを取得する

お名前.comで取得しました。ドメインの取得方法はこの辺りに記載あり。ドメイン取得後、DNSのAレコードに静的IPアドレスを登録します。

4.Let's Encryptをインストールする

Certbotのインストール方法は省略します。
(公式のCertbot クライアントのインストールに記載あり。)

5.証明書を発行する

Certbotのインストール後、以下のコマンドを実行します。("XXXXXXX.xxx"は環境による)

certbot certonly --manual -d XXXXXXX.xxx --preferred-challenges dns

実行すると以下のような画面になりますので進めます。
最後にEnterキーを押せと表示されますが、ここではEnterキーは押さず止めます。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N (*1)
Obtaining a new certificate
Performing the following challenges:
DNS-01 challenge for XXXXXXX.xxx (*2)

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.XXXXXXX.xxx with the following value:

XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOX (*3)

Once this is deployed,
-------------------------------------------------------------------------------
Press Enter to Continue ★まだEnter押してはいけない!!★

(*1) どっちでもよい
(*2) "XXXXXXX.xxx"は実際のドメインが表示される。
(*3) コマンド実行毎に変わるので、やり直す際には注意

6.DNSサーバのTXTレコードに上記の値を設定する

Enterキーを押す前に、DNSサーバにTXTレコードを登録します。
(以下の画像は、お名前.comの設定例)

7.認証させる(5の続き)

5でEnter待ちしていたスクリプトをEnterして次に進みます。
「Congratulations!・・・」が出力されれば完了です。

Waiting for verification...
Resetting dropped connection: acme-v01.api.letsencrypt.org
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/XXXXXXX.xxx/fullchain.pem. Your cert will
   expire on 20XX-XX-XX. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
   ・・・云々・・・

8.証明書等ファイルの確認

以下のように、ドメイン名のディレクトリが/etc/letsencrypt/live/の下に作成され、証明書ファイル(のリンク)が格納されていることを確認します。ディレクトリが存在すれば完了です。

[root@XXXXXXX ~]# ls -l /etc/letsencrypt/live/XXXXXXX.xxx/
total 4
lrwxrwxrwx. 1 root root  37 Mar 25 16:02 cert.pem -> ../../archive/XXXXXXX.xxx/cert1.pem
lrwxrwxrwx. 1 root root  38 Mar 25 16:02 chain.pem -> ../../archive/XXXXXXX.xxx/chain1.pem
lrwxrwxrwx. 1 root root  42 Mar 25 16:02 fullchain.pem -> ../../archive/XXXXXXX.xxx/fullchain1.pem
lrwxrwxrwx. 1 root root  40 Mar 25 16:02 privkey.pem -> ../../archive/XXXXXXX.xxx/privkey1.pem
-rw-r--r--. 1 root root 543 Mar 25 16:02 README

9.証明書の更新

Let's Encryptは3ヶ月で期限が切れますので、SSL証明書更新を行う必要があります。証明書の更新はDNS認証でも特に通常と変わりなくcertbotコマンドを使用することでできます。(DNSを使用するのは新規発行時の検証のみです。)

(例) 通常の更新

sudo certbot renew

(例) 強制更新

sudo certbot renew --force-renewal

自動更新したい場合は、cronに登録しましょう。