GNU/Linux >> Linux の 問題 >  >> Linux

Lets Encrypt SSL/TLS証明書をcertbotで管理する方法

暗号化しましょう は、インターネットセキュリティ研究グループ(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によって管理されている証明書のリストを表示するには、次のコマンドを発行します。

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にあります。

インタラクティブHTTPSインストール

前述のように、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)のマニュアルページ

Linux
  1. LinuxメールサービスをSSL/TLSで保護する方法

  2. LetsEncryptSSL証明書を使用してcPanel対応のアカウントを保護する方法

  3. SectigoSSL証明書を使用してcPanel対応アカウントを保護する方法

  1. 無料でISPConfig3.1を保護することでSSL証明書を暗号化できます

  2. SSL証明書を使用してポート8443でPleskホスト名を保護する方法

  3. SSL/TLS証明書で接続を保護する方法

  1. LetsEncrypt証明書を使用した中間互換SSLについての考え

  2. LetsEncryptSSLを使用してDokuWikiをDebian11にインストールする方法

  3. SSL / TLS暗号化接続でVSFTPDを構成する方法は?