暗号化しましょう は、インターネットセキュリティ研究グループ(ISRG)によって運営され、Electronic Frontier Foundation(EFF)、MozillaFoundationなどによって設立された自動化されたオープンな認証局(CA)です。これは、セキュリティとプライバシーの目的で通信を暗号化するために一般的に使用される無料のSSL / TLS証明書を提供します。最も注目すべき使用例は、HTTPSです。 Let's Encryptは、ACME(自動証明書管理環境)プロトコルに依存して、証明書の発行、取り消し、および更新を行います。 Certbotは、主に Let's EncryptからのSSL/TLS証明書を管理するために使用される無料のオープンソースユーティリティです。 証明する機関。これは、GNU / Linux、FreeBSD、OpenBSD、OS Xなど、ほとんどのUNIXおよびUNIXライクなオペレーティングシステムで利用できます。このガイドでは、プラットフォームに依存しないcertbotの使用法を紹介します。
注: certbotは進行中の作業であるため、このガイドで説明されている一部の機能または動作は、古いリリースまたは将来のリリースで異なる可能性があります。
- IPv4アドレスを指すAレコードを持つ登録済みドメイン名。例として`www.example.com`を使用します。
- 特権シェルへのアクセス。
certbotを使用してHTTPSを有効にするには、認証とインストールの2つの部分に分けることができます。 1つ目は、課題を解決し、証明書やその他のファイルを保存する必要があります。インストール手順には、Webサーバーの構成と保護が含まれます。 Certbotは、runサブコマンドを使用して、両方を自動的に実行できます。 certonlyサブコマンドとinstallサブコマンドは、それぞれ認証とインストールの手順用です。
Certbotには、証明書の更新および失効機能も含まれています。
Let's Encrypt証明書を取得するには、ACME(自動証明書管理環境)サーバーによって発行されたドメイン検証の課題を解決する必要があります。このチャレンジは、証明書を取得しようとしているドメインの所有権を確認します。さまざまなチャレンジタイプが存在し、最も一般的に使用されるのはHTTP-01です。その名前が示すように、HTTPプロトコルを使用します。 HTTPサーバーは任意のTCPポートを使用するように構成できますが、セキュリティ対策のため、このチャレンジはポート80でのみ機能します。 DNS-01は、DNS解決に基づくもう1つのあまり人気のないチャレンジタイプです。ワイルドカード証明書は、HTTP-01チャレンジでは取得できないことに注意してください。このガイドでは、最初はHTTP-01に焦点を当てます。
Certbotは、プラグインに依存して認証とインストールを実行します。 webrootやスタンドアロンなどのプラグインは認証のみを実行しますが、ApacheやNginxプラグインなどの他のプラグインは、証明書(つまり、Webサーバー構成)を自動的に取得してインストールするように設計されています。他のプラグインには、DNS-01認証用のベンダー固有のDNSプラグインがいくつか含まれています。組み込みのwebrootプラグインとスタンドアロンプラグインを除いて、ほとんどのcertbotプラグインは別々にインストールされます。
Certbotのインストール
ほとんどのLinuxディストリビューションは、公式リポジトリでcertbotを提供しています。以下は、広く使用されているプラットフォームのインストール手順です。
DebianとUbuntu:
apt update
apt install -y certbot
CentOS 7:
yum install -y certbot
FedoraおよびCentOS8:
dnf install -y certbot
Arch Linux:
pacman -Sy certbot
FreeBSD:
pkg install py36-certbot
OpenBSD 6.0以降:
pkg_add certbot
MacOS(自作が必要):
brew install letsencrypt
その他:
ご使用のプラットフォームでcertbotパッケージが使用できない場合は、公式のcertbot-autoラッパースクリプトを使用して、システムにcertbotを自動的にインストールできます。こちらからダウンロードできます。
サーバー上でcertbotによって管理されている証明書のリストを表示するには、次のコマンドを発行します。
certbot certificates
Webサーバーを手動で構成することを選択した場合、証明書の取得は2つの方法で実行できます。サーバーのWebルートディレクトリ(つまり、webrootプラグイン)へのアクセスをcertbotに与えるか、ポート80に一時的なスタンドアロンWebサーバー(つまり、スタンドアロンプラグイン)をデプロイします。後者のプラグインは、既存のWebサーバーとの統合が不可能または望ましくない場合に役立ちます。利便性と簡単な更新のために、使用するプラグインと一貫性を保ってください。
既存のウェブサーバーを使用する
既存のWebサーバーを使用するには、次のコマンドを実行する前に、ポート80で実行され、リッスンしていることを確認してください
certbot certonly --webroot
ドメイン名とWebルートへのパス(ほとんどのLinuxシステムではデフォルトで `/ var / www / html /`)を入力するように求められます。または、必要な情報をコマンド引数として指定することもできます。例:
certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m [email protected] -d www.example.com
スタンドアロンWebサーバーの使用
スタンドアロンサーバーを使用するには、最初にポート80の可用性を確認します。次を使用して、そのポートにバインドされているプロセスを確認できます。
ss -lntp 'sport = 80'
必要に応じて、続行する前に問題のあるサービス/プロセスを停止してください。次に、コマンドを発行します:
certbot certonly --standalone
証明書が発行されたら、Webサーバーを手動で構成する必要があります。関連するファイルは/etc/letsencrypt / live/your_domainにあります。
前述のように、certbotは、Webサーバーの構成を含むHTTPSセットアッププロセス全体を自動化できます。プラグインはApacheとNginxの両方で利用可能であり、個別のパッケージとしてインストールする必要がある場合があります。 Webサーバーに固有のcertbotプラグインをインストールしてから、 `certbotrun--PLUGIN_NAME`を実行します。 Debian10システムでのApacheのプロセス全体をデモンストレーションします。 Nginxのプロセスも同様です。
apt install -y python-certbot-apache certbot run --apache
Webサーバーがすでにドメイン名用に構成されていると仮定すると、certbotは既存の構成を解析し、HTTPSをアクティブ化するドメイン名を選択するように求めます。 Webサーバーが構成されていない場合、またはcertbotがドメイン名を検出できない場合は、プロンプトが表示されたらドメイン名を手動で入力するだけです。例:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Certbotは、新しいHTTPS仮想ホスト用の新しいApache構成ファイルを作成し、HTTPトラフィックをHTTPSにリダイレクトする必要があるかどうかを尋ねます。そうしないという強い理由がない限り、HTTPSへのリダイレクトを有効にする必要があります。
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Enabled Apache rewrite module Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://www.example.comが正常に有効になりました
手動更新
certbotを使用して証明書を更新するには、renewサブコマンドを使用できます。更新中、certbotは元の発行に使用されたものと同じプラグインとオプションを使用します。証明書は30日以内に有効期限が切れる場合にのみ更新されるため、このサブコマンドは、証明書の有効期限が近づかないとアクションを実行しないため、必要に応じて何度でも使用できます。コマンドは単純です:
certbot renew
スタンドアロンプラグインを使用して証明書を発行した場合、更新を成功させるには、Webサーバーを停止する必要があります。あなたはフックを使ってそれを達成することができます。たとえば、システムがApacheを実行している場合、コマンドは次のようになります。
certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"
自動更新
多くのディストリビューションでは、systemdタイマーまたはcronジョブを介して、デフォルトで自動更新が有効になっています。次のコマンドでsystemdタイマーを確認できます:
systemctl list-timers
そして、以下を使用するcronジョブの場合:
ls /etc/cron*
Webrootプラグインが発行に使用された場合、Webサーバーが実行されている限り、自動更新は成功するはずです。ただし、スタンドアロンプラグインでは、certbotがポート80にバインドできないため、Webサーバーが実行されている場合、デフォルトの自動更新コマンドは失敗します。したがって、上記のようにフックを追加して変更する必要があります。
証明書を取り消すには、証明書のパスまたは名前を指定します。
certbot revoke --cert-name cert_name (OR) certbot revoke --cert-path /path/to/cert.pem
例:
certbot revoke --cert-name www.example.net
revokeサブコマンドを実行した後、certbotは証明書ファイルを削除する必要があるかどうかを尋ねます。それらを削除しないことを選択した場合、取り消された証明書は、次回の更新時に更新されます。いくつかの自明のオプションを取り消しサブコマンドに渡すことができます:
- -delete-after-revoke(デフォルトではユーザー選択のプロンプト)
- -no-delete-after-revoke(デフォルトではユーザーの選択を求めるプロンプト)
- -理由[指定なし、キーの侵害、所属の変更、置き換え、操作の停止](デフォルト:指定なし)
通常の証明書を分離する代わりに、単一のワイルドカード証明書を使用して複数のサブドメインを識別することができます。ワイルドカード証明書を取得するには、DNS-01チャレンジを使用する必要があります。 ACME認証プロセスを自動化するベンダー固有のプラグインがいくつか利用可能ですが、手動のベンダー中立プロセスについて説明します。ドメインのネームサーバーにアクセスする必要があります。
次のコマンドを使用して、ワイルドカード証明書を要求します。
certbot certonly --manual --preferred-challenges dns-01 -d *.example.net
Certbotは、DNSTXTレコードにデプロイする必要のある値を表示します。このTXTレコードは、必要な所有権の検証として機能します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.example.net with the following value: y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
続行する前に、DNSコントロールパネルで指定されたレコードを作成する必要があります。レコードが作成されたら、Enterキーを押す前に数分待ちます。これにより、ACMEサーバーがレコードを検証します。場合によっては、新しいレコードが適切に伝播してアクセスできるようになるまでに、より長い待機時間が必要になることがあります。成功すると、証明書、チェーン、秘密鍵が/etc/letsencrypt/live/example.com/に保存されます。
- 公式のCertbotGithubリポジトリ
- 自動証明書管理環境(ACME)RFC 8555
- EFFCertbotドキュメント
- Certbot(1)のマニュアルページ