さくらのクラウドのDNSサービスを利用してLet’s Encryptのワイルドカード証明書を取得する
さくらのクラウドが提供している、DNSサーバアプライアンスサービスを使って、Let’s Encryptのワイルドカード証明書を取得する方法についてまとめています。
各サービスの概要について
Let’s Encryptのワイルドカード証明書を取得するための各種サービスについての概要です。
Let’s Encryptについて
Let’s Encryptは、SSL証明書を発行している証明書認証局で、有効期間は90日ということはあるものの、それまで有料が普通だったSSL証明書を無料で発行することで、インターネットの暗号化通信の普及に貢献しているサービスです。
Let’s Encrypt は、公共の利益のために運営されている、フリーで自動化されたオープンな認証局 (certificate authority; CA) です。 インターネット・セキュリティ・研究グループ (Internet Security Research Group; ISRG) がサービスを提供しています。
このLet’s Encryptでは、証明書を発行する方法のひとつとして、「DNS-01 チャレンジ」という方法があり、これは、ドメイン名のTXTレコードに特定の値を設定することで、ドメインの所有を証明して証明書を発行してもらます。
このチャレンジは、あなたのドメイン名が登録されている DNS があなたの制御下にあることを証明するために、ドメイン名の TXT レコードに特定の値を設定することを求めます。 HTTP-01 に比べると設定が難しいですが、HTTP-01 が動作しない状況でも適切に動作します。
また、この方法を使うことで、ワイルドカード証明書の発行が可能になることやサーバに依存されなく発行可能ということがあります。
利点:
このチャレンジを利用すれば、ドメイン名にワイルドカードが含まれる証明書を発行することができる。
複数のウェブサーバーを所有している場合でもうまく動作する。
さくらのクラウドのDNSサーバアプライアンスについて
さくらのクラウドのDNSサービスは、さくらのクラウドのサービスのひとつとして提供されているサービスで、DNSコンテンツサーバを提供し、DNSの各種設定を行うことができるようになっており、API経由での設定も可能になっています。料金は、1ゾーンあたり月額料金44円の従量課金なしの設定になっていて、比較的低コストで導入できるようになっています。
「DNS」では、さくらのクラウドで管理するDNSコンテンツサーバ(権威サーバ)を提供し、お客様側で任意のゾーンや、ゾーン内への各DNSレコードの設定を行うことができるサービスです。操作はわかりやすいWebインタフェースからはもちろん、他の機能と同様に API での制御も可能なため、
「certbot」と「certbot-dns-sakuracloud」のインストール
Let’s EncryptでSSL証明書を取得するためのツールの「certbot」と、そのプラグインとして動作するさくらのクラウドDNSプラグインの「certbot-dns-sakuracloud」をインストールします。
Certbotについて
Certbotは、Let’s EncryptでSSL証明書を取得するためのツールで、これを利用することで、コマンド操作で、認証の手続きを行うことができるようになります。
What’s Certbot?
Certbot is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTPS.
Certbot is made by the Electronic Frontier Foundation (EFF), a 501(c)3 nonprofit based in San Francisco, CA, that defends digital privacy, free speech, and innovation.
Let's Encrypt が発行する SSL/TLS サーバ証明書は、Certbot クライアント(旧・Let's Encrypt クライアント)から簡単なコマンド操作で取得することができます。
インストール
EPELリポジトリを有効にしてインストールします。
# dnf --enablerepo=epel install certbot python3-certbot-dns-sakuracloud
#インストール済み:
certbot-1.22.0-1.el8.noarch python-josepy-doc-1.9.0-1.el8.noarch python3-acme-1.22.0-1.el8.noarch
python3-certbot-1.22.0-1.el8.noarch python3-certbot-dns-sakuracloud-1.22.0-1.el8.noarch python3-cffi-1.11.5-5.el8.x86_64
python3-chardet-3.0.4-7.el8.noarch python3-configargparse-0.14.0-6.el8.noarch python3-configobj-5.0.6-11.el8.noarch
python3-cryptography-3.2.1-5.el8.x86_64 python3-distro-1.4.0-2.module+el8.3.0+120+426d8baf.noarch python3-dns-lexicon-3.3.17-2.el8.noarch
python3-future-0.18.2-2.el8.noarch python3-idna-2.5-5.el8.noarch python3-josepy-1.9.0-1.el8.noarch
python3-parsedatetime-2.5-1.el8.noarch python3-pip-9.0.3-22.el8.rocky.0.noarch python3-ply-3.9-9.el8.noarch
python3-pyOpenSSL-19.0.0-1.el8.noarch python3-pycparser-2.14-14.el8.noarch python3-pyrfc3339-1.1-1.el8.noarch
python3-pysocks-1.6.8-3.el8.noarch python3-pytz-2017.2-9.el8.noarch python3-pyyaml-3.12-12.el8.x86_64
python3-requests-2.20.0-2.1.el8_1.noarch python3-requests-file-1.4.3-5.el8.noarch python3-requests-toolbelt-0.9.1-4.el8.noarch
python3-setuptools-39.2.0-6.el8.noarch python3-tldextract-2.2.3-1.el8.noarch python3-urllib3-1.24.2-5.el8.noarch
python3-zope-component-4.3.0-8.el8.noarch python3-zope-event-4.2.0-12.el8.noarch python3-zope-interface-4.6.0-1.el8.x86_64
python36-3.6.8-38.module+el8.5.0+671+195e4563.x86_64
完了しました!
certbot-dns-sakuracloudの設定
certbot-dns-sakuracloudを動作させるための設定を行います。
さくらのクラウドのAPIキーの発行
さくらのクラウドのコントロールパネルのメニューから、「APIキー」を選択して、APIキーのアカウントを選択して、追加を押下して、必要項目を設定し、APIキーを発行します。
APIキーの設定ファイルを作成
APIキーの発行が完了したら、サーバにAPIキー情報を記載した設定ファイルを作成します。
# vi sakura_dns_apikey
dns_sakuracloud_api_token = '****************'
dns_sakuracloud_api_secret = '****************'
作成が完了したら、パッミションを設定しておきます。
# chmod 600 sakura_dns_apikey
Use of this plugin requires a configuration file containing Sakura Cloud DNS API credentials, obtained from your Sakura Cloud DNS apikey page.
Welcome to certbot-dns-sakuracloud’s documentation! — certbot-dns-sakuracloud 0 documentation
ワイルドカード証明書の発行
設定等の準備が整ったので、ワイルドカード証明書の発行を行います。
ワイルドカード証明書発行のためのcertbotコマンド
ワイルドカード証明書を発行するためのcertbotコマンドについてです。
# certbot certonly --dns-sakuracloud --dns-sakuracloud-credentials ~/sakura_dns_apikey --dns-sakuracloud-propagation-seconds 60 -d hopes.host -d *.hopes.host -m info@hopes.host --agree-tos --manual-public-ip-logging-ok --keep-until-expiring
使用しているcertbotコマンドのさくらのクラウドDNSに関するオプションに関しては、以下のように設定しています。
- –dns-sakuracloud
- DNSのTXTレコードを使用して証明書を取得するようにします。このオプションを指定しない場合には、以下のように案内が出力されます。
How would you like to authenticate with the ACME CA? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: Obtain certificates using a DNS TXT record (if you are using Sakura Cloud for DNS). (dns-sakuracloud) 2: Spin up a temporary webserver (standalone) 3: Place files in webroot directory (webroot) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- –dns-sakuracloud-credentials
- さくらのAPIキー情報のファイルパスを指定します。
--dns-sakuracloud-credentials
Sakura Cloud credentials INI file. (Required)
Welcome to certbot-dns-sakuracloud’s documentation! — certbot-dns-sakuracloud 0 documentation
- –dns-sakuracloud-propagation-seconds
- さくらのDNSのTXTレコードに、認証用のコードを記載してその反映を待つまでの時間を指定します。特に指定しない場合は、デフォルト値が設定されており、90秒となります。ここでは、少し短くなるように60秒を指定しています。
--dns-sakuracloud-propagation-seconds
The number of seconds to wait for DNS to propagate before asking the ACME server to verify the DNS record. (Default: 90)
Welcome to certbot-dns-sakuracloud’s documentation! — certbot-dns-sakuracloud 0 documentation
その他の通常のcertbotコマンドのオプションについては以下を設定しています。このへんは、環境に応じて設定すれば良いかと思います。
- -d
- 証明書を取得したいドメインを指定します。ここで、「*.example.jp」と指定して、ワイルドカード証明書の発行を設定します。また、ここでは、「example.jp」も対応する証明書になるように設定しています。
SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。
複数のドメイン名を指定する場合、-d example.jp -d www.example.jp のように -d フラグを複数回指定します。
また、-d example.jp,www.example.jp のようにカンマ( , )で区切ったリストをパラメータとして指定する方法もあります。
(デフォルト: )
- –agree-tos
-
--agree-tos
ACME 利用規約に同意します。
このオプションを有効にした場合、過去に利用規約の同意を行ったことがない場合であっても、利用規約の同意を求める画面が表示されません。
(デフォルト: False)
- –manual-public-ip-logging-ok
-
--manual-public-ip-logging-ok
グローバルIPアドレスを認証局でロギングすることに対する確認を表示しません。
このオプションを指定した場合、グローバルIPアドレスのロギングが自動的に許可されます。
(デフォルト: False)
- –keep-until-expiring
-
リクエストされた SSL/TLS サーバ証明書が既に存在している証明書とマッチする場合には、証明書の更新が必要になるまでは、常に既存の証明書を保ちます(新規の証明書を取得しません)。
サブコマンド run と併せて指定した場合、既に導入されている証明書がそのまま再インストールされます(新しい証明書は発行されません)。
(デフォルト: False)
ワイルドカード証明書発行の実施
コマンドを実行してワイルドカード証明書を発行します。
# certbot certonly --dns-sakuracloud --dns-sakuracloud-credentials ~/sakura_dns_apikey --dns-sakuracloud-propagation-seconds 60 -d hopes.host -d *.hopes.host -m info@hopes.host --agree-tos --manual-public-ip-logging-ok --keep-until-expiring
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, 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 our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for hopes.host and *.hopes.host
Waiting 60 seconds for DNS changes to propagate
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/hopes.host/fullchain.pem
Key is saved at: /etc/letsencrypt/live/hopes.host/privkey.pem
This certificate expires on 2023-01-08.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
証明書の発行に成功しました。取得した証明書を確認します。証明書のパスは、シンボリックリンクが設定され、実態ファイルは別な場所に保存されるようです。
# ls -la /etc/letsencrypt/live/hopes.host/
合計 4
drwxr-xr-x 2 root root 117 10月 10 15:23 .
drwx------ 3 root root 50 10月 10 15:23 ..
-rw-r--r-- 1 root root 692 10月 10 15:23 README
lrwxrwxrwx 1 root root 34 10月 10 15:23 cert.pem -> ../../archive/hopes.host/cert1.pem
lrwxrwxrwx 1 root root 35 10月 10 15:23 chain.pem -> ../../archive/hopes.host/chain1.pem
lrwxrwxrwx 1 root root 39 10月 10 15:23 fullchain.pem -> ../../archive/hopes.host/fullchain1.pem
lrwxrwxrwx 1 root root 37 10月 10 15:23 privkey.pem -> ../../archive/hopes.host/privkey1.pem
ワイルドカード証明書の更新
Let’s EncryptのSSL証明書の有効期限は、3ヶ月となっていますので、定期的に更新する必要があります。ここでは、証明書の更新について確認しておきます。
有効期限を確認して更新
上記の発行のコマンドでは、「–keep-until-expiring」を指定しているため、必要性がある場合にだけ、更新処理が走るため、期限内の場合には、更新はされずスルーされます。
# certbot certonly --dns-sakuracloud --dns-sakuracloud-credentials ~/sakura_dns_apikey --dns-sakuracloud-propagation-seconds 60 -d hopes.host -d *.hopes.host -m info@hopes.host --agree-tos --manual-public-ip-logging-ok --keep-until-expiring
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certificate not yet due for renewal
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal; no action taken.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
更新の必要がある際には、証明書の有効期限が更新されるようになるので、基本的には、このコマンドを実施すれば良いかと思います。
強制的に更新
残りの有効期限に関係なく、強制的に有効期限を更新したい場合には、「–keep-until-expiring」の代わりに、「–renew-by-default」を指定します。
リクエストされたドメイン名の SSL/TLS サーバ証明書が既に存在する場合には、残りの有効期間にかかわらず、証明書を更新します。
このオプションを有効にすると --expand も有効になります。
多くの場合、このオプションではなく --keep-until-expiring を使うべきです。
(デフォルト: False)
強制更新を実施してみます。
# certbot certonly --dns-sakuracloud --dns-sakuracloud-credentials ~/sakura_dns_apikey --dns-sakuracloud-propagation-seconds 60 -d hopes.host -d *.hopes.host -m info@hopes.host --agree-tos --manual-public-ip-logging-ok --renew-by-default
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Renewing an existing certificate for hopes.host and *.hopes.host
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/hopes.host/fullchain.pem
Key is saved at: /etc/letsencrypt/live/hopes.host/privkey.pem
This certificate expires on 2023-01-08.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
日にちが同じなので、分かりにくいですが、時間等を確認すると更新されていることが確認できます。また、シンボリックリンクの設定されている実態ファイルのパスも変更されていることが確認できます。
# ls -la /etc/letsencrypt/live/hopes.host/
合計 4
drwxr-xr-x 2 root root 117 10月 10 15:31 .
drwx------ 3 root root 50 10月 10 15:23 ..
-rw-r--r-- 1 root root 692 10月 10 15:23 README
lrwxrwxrwx 1 root root 34 10月 10 15:31 cert.pem -> ../../archive/hopes.host/cert2.pem
lrwxrwxrwx 1 root root 35 10月 10 15:31 chain.pem -> ../../archive/hopes.host/chain2.pem
lrwxrwxrwx 1 root root 39 10月 10 15:31 fullchain.pem -> ../../archive/hopes.host/fullchain2.pem
lrwxrwxrwx 1 root root 37 10月 10 15:31 privkey.pem -> ../../archive/hopes.host/privkey2.pem
これで、さくらのクラウドのDNSサービスを利用した、ワイルドカード証明書の発行は完了です。あとは、HTTPサーバ等でこの証明書を設定すれば、ワイルドカードなSSL暗号化通信を実現することが可能になります。
2022年10月13日に投稿されました。
2022年11月11日に更新されました。