序章
ワイルドカード証明書は、単一の証明書で任意の数のサブドメインを保護できるSSL証明書です。 複数のサブドメインをサポートする必要があるが、それらすべてを個別に構成したくない場合は、ワイルドカード証明書が必要になることがあります。
Let’s Encrypt は、自動化されたAPIを使用して無料の証明書を付与するSSL認証局です。 このチュートリアルでは、次の手順に従って、Let’sEncryptワイルドカード証明書を作成します。
- DNSが正しく設定されていることを確認する
- DNSベースの課題を完了するために必要なCertbotプラグインのインストール
- CertbotにDNSプロバイダーへのアクセスを許可する
- 証明書の取得
この情報は、あらゆるLinuxディストリビューションおよびあらゆるサーバーソフトウェアに役立つことを目的としていますが、いくつかのギャップをさらにドキュメントで埋める必要がある場合があります。
前提条件
このチュートリアルでは、すでに次のものがあることを前提としています。
- インストールされているCertbotユーティリティ、バージョン
0.22.0
以降。 Certbotのインストールについてサポートが必要な場合は、 Let ‘の暗号化タグページにアクセスしてください。ここには、さまざまなLinuxディストリビューションおよびサーバーのインストールガイドがあります。 いくつかの一般的な設定を以下に示します。- Ubuntu20.04でLet’sEncryptを使用してNginxを保護する方法Ubuntu20.04でLet’sEncryptを使用してApacheを保護する方法Certbotスタンドアロンモードを使用してUbuntu18.04でLet’sEncryptSSL証明書を取得する方法
- ドメイン名、およびCertbotによってサポートされているDNSプロバイダー。 サポートされているプロバイダーのリストについては、CertbotのDNSプラグインリストを参照してください。
DNSレコードの設定とテストから始めましょう。
ステップ1—ワイルドカードDNSを設定する
ワイルドカードSSL証明書を取得する前に、サーバーが複数のサブドメインの要求に応答していることを確認する必要があります。 これは通常、ワイルドカードDNSレコードを設定することで実現されます。これは次のようになります。
*.example.com. 3600 IN A 203.0.113.1
*
ワイルドカード文字は、任意のホスト名の代用として扱われます。 このDNSレコードの例は、one.example.com
およびtwo.example.com
と一致します。 *
ワイルドカードは、複数のレベルの名前ではなく、1つのホスト名にのみ展開されるため、裸のexample.com
とは一致せず、one.two.example.com
とも一致しません。
さらに、ワイルドカードDNSレコードは 1つのワイルドカード文字しか持てないため、*.*.example.com
は許可されていません。
正しいDNSエントリを設定するには、DNSプロバイダーのドキュメントを参照してください。 続行する前に、A
またはCNAME
ワイルドカードレコードのいずれかを追加することをお勧めします。
注: DigitalOceanを使用してDNSを管理している場合、詳細については、製品ドキュメントの DNSレコードの作成、編集、および削除方法を参照してください。
ワイルドカードDNSが意図したとおりに機能していることをテストするには、host
コマンドを使用していくつかのホスト名を照会します。
- host one.example.com
上記の独自のドメインとホスト名に置き換えてください。 また、DNSレコードがシステム全体に伝播するのに数分かかる場合があることを忘れないでください。 DNSレコードを追加したばかりでエラーが発生する場合は、数分待ってから再試行してください。
入力したホスト名が正しく解決されると、次のように出力されます。
Outputone.example.com has address 203.0.113.1
それ以外の場合は、NXDOMAIN
エラーが表示されます。
OutputHost one.example.com not found: 3(NXDOMAIN)
複数のサブドメインがサーバーに解決されていることを確認したら、次の手順に進むことができます。次の手順では、DNSプロバイダーに接続するようにCertbotを構成します。
ステップ2—正しいCertbotDNSプラグインをインストールする
Let’s Encryptは、証明書を発行する前に、証明書を要求しているホストを制御していることを確認するためのチャレンジを実行します。 ワイルドカード証明書の場合、ドメイン全体を制御していることを証明する必要があります。 これを行うには、DNSベースのチャレンジに応答します。ここで、Certbotは、ターゲットドメインに特別なDNSレコードを作成することでチャレンジに応答します。 次に、証明書を発行する前に、サーバーを暗号化してこのレコードを検証しましょう。
DNSプロバイダーに接続するには、Certbotにプラグインが必要です。 DNSプロバイダーに適切なプラグインの名前を取得するには、CertbotのDNSプラグインリストを参照してください。
たとえば、DigitalOceanプロバイダーはcertbot-dns-digitalocean
と呼ばれます。 次のパッケージをインストールすることで、UbuntuとDebianにcertbot-dns-digitalocean
プラグインをインストールできます。
- sudo apt install python3-certbot-dns-digitalocean
他のプラグインも同じ命名形式に従う必要があります。 別のサービスを使用している場合は、プロバイダーの名前を上記のコマンドに交換してください。
CentOSおよびその他のRPMベースのディストリビューションでは、インストールコマンドはdnf
の場合があります。
- dnf install python3-certbot-dns-digitalocean
またはyum
:
- yum install python3-certbot-dns-digitalocean
また、Certbotプラグインパッケージにアクセスするには、これらのディストリビューションに追加のパッケージリポジトリをインストールする必要がある場合があります。
プラグインが正しくインストールされたことを確認するために、Certbotに現在のプラグインをリストするように依頼できます。
- certbot plugins
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* dns-digitalocean
Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean
for DNS).
Interfaces: IAuthenticator, IPlugin
Entry point: dns-digitalocean =
certbot_dns_digitalocean.dns_digitalocean:Authenticator
* standalone
Description: Spin up a temporary webserver
Interfaces: IAuthenticator, IPlugin
Entry point: standalone = certbot.plugins.standalone:Authenticator
* webroot
Description: Place files in webroot directory
Interfaces: IAuthenticator, IPlugin
Entry point: webroot = certbot.plugins.webroot:Authenticator
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
上記の出力では、dns-digitalocean
プラグインが、デフォルトのstandalone
およびwebroot
プラグインとともに最初にリストされています。
正しいプラグインがインストールされていることを確認したら、次の手順に進んでプラグインを構成します。
ステップ3—Certbotプラグインの構成
CertbotはDNSプロバイダーに接続し、ユーザーに代わってDNSレコードを作成する必要があるため、Certbotに許可を与える必要があります。 これには、DNSプロバイダーからAPIトークンまたはその他の認証情報を取得し、それをCertbotが後で読み取る安全な資格情報ファイルに入れることが含まれます。
プロバイダーごとに認証プロセスが異なるため、取得する必要のあるトークンまたはキーの詳細については、特定のCertbotDNSプラグインのドキュメントを参照してください。
この例では、引き続きdns-digitalocean
プラグインを使用し、ファイル~/certbot-creds.ini
にクレデンシャルを保存します。
nano
テキストエディタを使用してこのファイルを作成します。
- nano ~/certbot-creds.ini
これにより、新しい空白のテキストファイルが開きます。 特定のDNSプロバイダーの指示に基づいて情報を追加することをお勧めします。 DigitalOceanには単一のAPIトークンが必要なため、次のようになります。
dns_digitalocean_token = 235dea9d8856f5b0df87af5edc7b4491a92745ef617073f3ed8820b5a10c80d2
上記のサンプルトークンは、必ず独自の情報に置き換えてください。
ファイルを保存して閉じます。 nano
を使用している場合は、CTRL+O
と入力し(「write o ut」の場合)、ENTER
を押してから、CTRL+X
を押します。出口。
ファイルを作成した後、秘密が他のユーザーに漏洩しないように、そのアクセス許可を制限する必要があります。 次のchmod
コマンドは、ユーザーのみに読み取りおよび書き込みアクセスを許可します。
- chmod 600 ~/certbot-creds.ini
資格情報ファイルを設定すると、実際に証明書を要求する準備が整います。
ステップ4—証明書の取得
この時点で、Let’s Encryptのワイルドカード証明書の取得は、「通常の」非ワイルドカード証明書と同様です。 プロセスの主な変更点は、DNSベースのチャレンジを指定し、DNSクレデンシャルファイルを指すことです。 さらに、-d
フラグ付きのワイルドカードドメインを使用します。
- sudo certbot certonly \
- --dns-digitalocean \
- --dns-digitalocean-credentials ~/certbot-creds.ini \
- -d '*.example.com'
--nginx
または--apache
プラグインを使用して、ワイルドカード証明書を使用してこれらのサーバーを自動的に構成することはできないことに注意してください。 代わりにcertonly
コマンドを使用して、証明書のみをダウンロードします。
上記のコマンドを実行すると、Certbotを初めて実行する場合に、いくつかの質問に答えることができます。 それらに答えた後、Cerbotがチャレンジを実行し、Let’s Encryptサーバーがそれを検証し、新しい証明書がダウンロードされて/etc/letsencrypt/
に保存されます。 次のような出力が表示されます。
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2021-09-27. 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"
- 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
ワイルドカードSSL証明書が正常に生成されました。 次のステップは、それを使用するようにサーバーアプリケーションを構成することです。 次のセクションでは、これに役立ついくつかのリソースにリンクします。
結論
このチュートリアルでは、Certbotを構成し、Let’sEncrypt認証局からワイルドカードSSL証明書をダウンロードしました。 これで、この証明書を使用して接続を保護するようにサーバーソフトウェアを構成する準備が整いました。
ダウンロードされた証明書ファイルの詳細、およびCertbotが証明書を自動的に更新するときにアプリケーションを正常に再起動する方法については、チュートリアルCertbotスタンドアロンモードを使用してSSLを取得する方法のステップ3と4を参照してください。 Ubuntu18.04の証明書。