HOPES

さくらのクラウドのDNSサービスを利用してLet’s Encryptのワイルドカード証明書を取得する

さくらのクラウドの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 について - Let's Encrypt - フリーな SSL/TLS 証明書

このLet’s Encryptでは、証明書を発行する方法のひとつとして、「DNS-01 チャレンジ」という方法があり、これは、ドメイン名のTXTレコードに特定の値を設定することで、ドメインの所有を証明して証明書を発行してもらます。

このチャレンジは、あなたのドメイン名が登録されている DNS があなたの制御下にあることを証明するために、ドメイン名の TXT レコードに特定の値を設定することを求めます。 HTTP-01 に比べると設定が難しいですが、HTTP-01 が動作しない状況でも適切に動作します。

チャレンジの種類 - Let's Encrypt - フリーな SSL/TLS 証明書

また、この方法を使うことで、ワイルドカード証明書の発行が可能になることやサーバに依存されなく発行可能ということがあります。

利点:

このチャレンジを利用すれば、ドメイン名にワイルドカードが含まれる証明書を発行することができる。

複数のウェブサーバーを所有している場合でもうまく動作する。

チャレンジの種類 - Let's Encrypt - フリーな SSL/TLS 証明書

さくらのクラウドのDNSサーバアプライアンスについて

さくらのクラウドのDNSサービスは、さくらのクラウドのサービスのひとつとして提供されているサービスで、DNSコンテンツサーバを提供し、DNSの各種設定を行うことができるようになっており、API経由での設定も可能になっています。料金は、1ゾーンあたり月額料金44円の従量課金なしの設定になっていて、比較的低コストで導入できるようになっています。

「DNS」では、さくらのクラウドで管理するDNSコンテンツサーバ(権威サーバ)を提供し、お客様側で任意のゾーンや、ゾーン内への各DNSレコードの設定を行うことができるサービスです。操作はわかりやすいWebインタフェースからはもちろん、他の機能と同様に API での制御も可能なため、

DNS(アプライアンス) | さくらのクラウド ドキュメント

「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.

About Certbot

Let's Encrypt が発行する SSL/TLS サーバ証明書は、Certbot クライアント(旧・Let's Encrypt クライアント)から簡単なコマンド操作で取得することができます。

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キーの発行が完了したら、サーバに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 のようにカンマ( , )で区切ったリストをパラメータとして指定する方法もあります。

(デフォルト: )

コマンド解説 - Let's Encrypt 総合ポータル

–agree-tos

--agree-tos

ACME 利用規約に同意します。

このオプションを有効にした場合、過去に利用規約の同意を行ったことがない場合であっても、利用規約の同意を求める画面が表示されません。

(デフォルト: False)

コマンド解説 - Let's Encrypt 総合ポータル

–manual-public-ip-logging-ok

--manual-public-ip-logging-ok

グローバルIPアドレスを認証局でロギングすることに対する確認を表示しません。

このオプションを指定した場合、グローバルIPアドレスのロギングが自動的に許可されます。

(デフォルト: False)

コマンド解説 - Let's Encrypt 総合ポータル

–keep-until-expiring

リクエストされた SSL/TLS サーバ証明書が既に存在している証明書とマッチする場合には、証明書の更新が必要になるまでは、常に既存の証明書を保ちます(新規の証明書を取得しません)。

サブコマンド run と併せて指定した場合、既に導入されている証明書がそのまま再インストールされます(新しい証明書は発行されません)。

(デフォルト: False)

コマンド解説 - Let's Encrypt 総合ポータル

  • ワイルドカード証明書発行の実施

    コマンドを実行してワイルドカード証明書を発行します。

    # 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)

    コマンド解説 - Let's Encrypt 総合ポータル

    強制更新を実施してみます。

    # 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日に更新されました。