コンテンツにスキップ

「Certbot」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
日本のwikipediaへのリンクに修正
カテゴリを変更
 
(6人の利用者による、間の87版が非表示)
1行目: 1行目:
[[Category:ネットワーク]]
[[Category:ネットワーク]]
[[Category:セキュリティ]]
[[Category:暗号化]]
[[Category:コマンド]]
[[en:Let’s Encrypt]]
[[Category:電子フロンティア財団]]
[https://letsencrypt.org/ Let’s Encrypt] は[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用し、フリーかつ自動化されたオープンな認証局です。
[[en:Certbot]]
[[ru:Certbot]]
[https://github.com/certbot/certbot Certbot] は Python で書かれた [https://www.eff.org/ Electronic Frontier Foundation] の [[ACME]] クライアントで、Python で記述されており、ウェブサーバの自動設定や HTTP チャレンジのためのビルトイン Web サーバといった便利な機能を持ちます。 Certbot は [https://letsencrypt.org/ Let's Encrypt] に推奨されています。


== インストール ==
公式クライアントは '''Certbot''' と呼ばれており、コマンドラインから有効な SSL 証明書を取得できます。手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。


{{Pkg|certbot}} パッケージを[[インストール]]してください。
{{Note|以前 ''Let’s Encrypt client'' と呼ばれていた公式クライアントは、現在 ''Certbot'' と呼ばれています。}}


発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:
== Certbot ==
* [[Nginx]] 用のプラグインは {{Pkg|certbot-nginx}} パッケージに入っています。
* [[Apache HTTP Server]] 用のプラグインは {{Pkg|certbot-apache}} パッケージで使えます。


== 設定 ==
''Certbot'' は公式のリファレンスクライアントです。Python で書かれており、証明書を取得するためのコマンドラインツールを提供します。


証明を作成と使用方法についての詳細は [https://certbot.eff.org/docs/ Certbot のドキュメント] を参照してください。
=== インストール ===


=== プラグイン ===
{{Pkg|certbot}} パッケージを[[インストール]]してください。
{{Warning|プラグインを使用すると設定ファイルが上書きされ、Certbot 証明書の設定とパスが追加される場合があります。先に設定ファイルの'''バックアップ'''を作成することを推奨します。}}


==== Nginx ====
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:
* [[Nginx]] 用の実験的なプラグインは {{Pkg|certbot-nginx}} パッケージに入っています。
* {{Pkg|certbot-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。


{{pkg|certbot-nginx}} プラグインは [[nginx]] の自動設定を提供します。このプラグインは、各ドメインの設定を検出しようとします。このプラグインは、セキュリティのために推奨される追加の設定および Certbot 証明書へのパスを追加します。例として、[[#サーバーブロックの管理]] を参照してください。
=== 設定 ===


[[nginx#サーバーブロック|サーバーブロック]]を初めて設定する場合:
証明を作成・インストールする方法は [https://certbot.eff.org/docs/ Certbot のドキュメント] を参照してください。


# certbot --nginx
==== 手動 ====


証明書を更新するには:
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}


# certbot renew
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:
# certbot certonly --manual


nginx の設定ファイルに手を加えずに証明書を変更するには:
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/''your.domain''/}} に保存されます。


# certbot --nginx certonly
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。


詳しい情報は [https://certbot.eff.org/#arch-nginx Nginx on Arch Linux] を見てください。インストールされた証明書の状態を有効に保つ方法は[[#自動更新]]を見てください。
==== Webroot ====
webroot を使う場合は、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証を行います。ウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます。


===== Nginx サーバーブロックの管理 =====
# certbot certonly --email ''email@example.com'' --webroot -w ''/path/to/html/'' -d ''your.domain''
サーバーブロックを手動で管理する場合、以下のように[[nginx#サーバーブロック|サーバーブロック]]で使うことができます:
{{hc|/etc/nginx/sites-available/example|2=
server {
listen 443 ssl http2;
listen [::]:443 ssl http2; # Listen on IPv6
ssl_certificate /etc/letsencrypt/live/''domain''/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/''domain''/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
..
} }}


詳しくは [[nginx#TLS/SSL]] を見てください。
サーバーの設定で {{ic|/etc/letsencrypt/live/''your.domain''/}} の証明書を使うようにしてください。


別の設定ファイルを作成してサーバーブロックから include して使用することも可能です:
===== Multiple domains =====


{{hc|/etc/nginx/conf/001-cerbot.conf|2=
If you use more than one domain or subdomains, the webroot has to be given for every domain. If no new webroot is given, the previous is taken.
ssl_certificate /etc/letsencrypt/live/''domain''/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/''domain''/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}}


{{hc|/etc/nginx/sites-available/example|<nowiki>
Management of this can be made much easier, if you map all http requests for {{ic|/.well-known/acme-challenge/}} to a single folder, e.g. {{ic|/var/lib/letsencrypt}}.
server {
For nginx you can achieve this by placing this location block within server blocks of sites you want to request certificates for:
listen 443 ssl http2;
{{bc|<nowiki>
listen [::]:443 ssl http2; # Listen on IPv6
location /.well-known/acme-challenge {
include conf/001-certbot.conf;
root /var/lib/letsencrypt;
..
default_type "text/plain";
try_files $uri =404;
}
}
</nowiki>}}
</nowiki>}}

For Apache you can achieve this by creating the file {{ic|httpd-acme.conf}}:
==== Apache ====

{{pkg|certbot-apache}} プラグインは、[[Apache HTTP Server]] の自動設定を提供します。このプラグインは、各ドメインの設定を検出しようとします。このプラグインは、セキュリティのために推奨される追加設定、証明書を使用するための設定、certbot 証明書へのパスを追加します。サンプルについては、[[#Apache バーチャルホストの管理]] を参照してください。

[[Apache_HTTP_Server#バーチャルホスト|バーチャルホスト]] の初回セットアップ:

# certbot --apache

証明書の更新:

# certbot renew

Apache 設定ファイルを変更せずに証明書の変更:

# certbot --apache certonly

詳細は [https://certbot.eff.org/#arch-apache Certbot-Apache on Arch Linux] と [[#自動更新]] を参照してください。

===== Apache バーチャルホストの管理 =====

これらのファイルを手動で管理する場合は、以下の例をすべての [[Apache HTTP Server#バーチャルホスト|バーチャルホスト]] で使用することができます:

{{hc|/etc/httpd/conf/extra/001-certbot.conf|2=
<IfModule mod_ssl.c>
<VirtualHost *:443>

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/'domain'/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/'domain'/privkey.pem

</VirtualHost>
</IfModule>
}}

{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
<IfModule mod_ssl.c>
Listen 443
</IfModule>

Include conf/extra/001-certbot.conf
..
</nowiki>}}

詳細については、[[Apache HTTP Server#TLS]] を参照してください。

=== Webroot ===
{{Note|
* Webroot 方式では Certbot で認証するために'''ポート 80 で HTTP 接続'''できるようにする必要があります。
* サーバーの名前は DNS と一致している必要があります。
* {{ic|http://domain.tld/.well-known}} の読み取りを許可するためにホストのパーミッションを修正する必要がある場合があります。
}}

webroot 方式を使う場合、Certbot クライアントは {{ic|/path/to/domain.tld/html/.well-known/acme-challenge/}} の中でチャレンジ・レスポンス認証を行います。

手動でインストールする場合と比べて、自動で証明書を更新したり楽に管理することができます。ただし、[[#プラグイン]]を使う時のように自動設定・自動インストールはできません。

==== ACME チャレンジリクエストのマッピング ====

{{ic|.well-known/acme-challenge}} に対する HTTP リクエストを全てひとつのディレクトリ (例: {{ic|/var/lib/letsencrypt}}) にマッピングすることで管理が簡単になります。

Certbot やウェブサーバー (''http'' ユーザーで動作する [[nginx]] や [[Apache]] など) が書き込みできるパスを使用してください:
# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp http /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt

===== nginx =====

location ブロックを記述したファイルを作成してサーバーブロックから読み込むようにしてください:
{{hc|/etc/nginx/conf.d/letsencrypt.conf|<nowiki>
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
</nowiki>}}

サーバー設定の例:
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki>
server {
server_name domain.tld
..
include conf.d/letsencrypt.conf;
}
</nowiki>}}

===== Apache =====
{{ic|/etc/httpd/conf/extra/httpd-acme.conf}} ファイルを作成してください:
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
65行目: 169行目:
</Directory>
</Directory>
</nowiki>}}
</nowiki>}}

and including it in {{ic|httpd.conf}}:
{{ic|/etc/httpd/conf/httpd.conf}} で上記ファイルを読み込んでください:
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
Include conf/extra/httpd-acme.conf
Include conf/extra/httpd-acme.conf
</nowiki>}}
</nowiki>}}
The chosen path has then to be writable for the chosen letsencrypt client. It also has to be readable by the web server; you can achieve this thereby : {{ic|chgrp http /var/lib/letsencrypt && chmod g+s /var/lib/letsencrypt}}.


===== 自動更新 =====
==== 証明書の取得 ====


{{ic|certbot certonly}} を実行するき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録ます。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。
公開パスして {{ic|/var/lib/letsencrypt/}} を使用 {{ic|domain.tld}} 証明書を取得するには:
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld'''


(サブ)ドメインを追加するときは、登録済みの全てのドメインを一緒に指定します:
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:
# certbot certonly --email '''email@example.com''' --webroot -w '''/var/lib/letsencrypt/''' -d '''domain.tld,sub.domain.tld'''

登録している証明書を(全て)更新するには:
# certbot renew

{{Note|Do not forget to include the Let's Encrypt configuration file inside all related server blocks, those handling HTTP traffic as well as those handling HTTPS traffic, especially when using - as recommended - HSTS (HTPP Strict Transport Security). This can lead one to obtain certificate(s) smoothly, and once the setup is done, to be blocked for the renewal.}}

証明書の更新方法については[[#自動更新]]も参照。

=== 手動 ===

ウェブサーバーのプラグインが存在しない場合、以下のコマンドを使ってください:
# certbot certonly --manual

DNS の TXT レコードを利用して認証したい場合、以下のコマンドを使ってください:
# certbot certonly --manual --preferred-challenges dns

上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/archive/''your.domain''/}} に保存され、{{ic|/etc/letsencrypt/live/''your.domain''/}} からリンクが張られます。

証明書が取得できたら手動でウェブサーバーを設定して、シンボリックリンクが存在するディレクトリの秘密鍵・証明書・証明書チェーンを参照してください。

{{Note|上のコマンドを複数回実行したり証明書を更新したりするとファイル名の末尾に数字が付加されたファイルが {{ic|/etc/letsencrypt/archive/''your.domain''/}} に作られます。Certbot は {{ic|/etc/letsencrypt/live/''your.domain''/}} のシンボリックリンクを自動的に最新のファイルに更新するため、証明書を更新するたびに手動でウェブサーバーの設定を更新する必要はありません。}}

== 高度な設定 ==

=== 自動更新 ===

==== systemd ====
{{ic|certbot.service}} ユニットを作成:


{{hc|1=/etc/systemd/system/certbot.service|
{{hc|1=/etc/systemd/system/certbot.service|
83行目: 217行目:
[Service]
[Service]
Type=oneshot
Type=oneshot
ExecStart=/usr/bin/certbot renew}}
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}


プラグインを使わずにウェブサーバーの設定を自動で管理する場合、ウェブサーバーを手動でリロードして証明書が更新されるたびにリロードが必要です。{{ic|ExecStart}} コマンドに {{ic|--post-hook "systemctl reload nginx.service"}} を追加することでリロードさせることができます [https://certbot.eff.org/docs/using.html#renewing-certificates]。適宜 {{ic|nginx.service}} のかわりに {{ic|httpd.service}} を使ってください。
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。


{{Note|[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。サービスは遅延があるため、[https://github.com/certbot/certbot/blob/master/certbot/CHANGELOG.md#0290---2018-12-05 v0.29.0] 以降、certbot を非対話的に呼び出す際に遅延が追加されているため、サービスが完了するまでに最大480秒かかることがありますので、ご注意ください。}}
それから、タイマーを追加することで毎月証明書を更新できます。

1 日 2 回のランダムな遅延時間を設定された証明書の更新をチェックするタイマーの追加により、全員の更新要求が分散され、Let's Encrypt サーバーの負荷が軽減されます。


{{hc|1=/etc/systemd/system/certbot.timer|
{{hc|1=/etc/systemd/system/certbot.timer|
2=[Unit]
2=[Unit]
Description=Monthly renewal of Let's Encrypt's certificates
Description=Daily renewal of Let's Encrypt's certificates


[Timer]
[Timer]
OnCalendar=monthly
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true
Persistent=true


100行目: 237行目:
WantedBy=timers.target}}
WantedBy=timers.target}}


{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|certbot.service}} を[[起動]]してください。
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。


=== ワイルドカード証明書の自動更新 ===
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:


手順はかなり簡単です。ワイルドカード証明書を発行するには、[https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579 ACMEv2 protocol を使用]して、DNS チャレンジリクエストを経由しなければなりません。
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}

* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}
証明書を手動で発行するのは簡単ですが、自動化は簡単ではありません。DNS チャレンジは、certbot によって与えられた TXT レコードを表し、ドメインゾーンファイルに手動で設定する必要があります。

更新のたびにゾーンファイルを更新する必要があります。これを手動で行わないようにするには、certbot のプラグインが含まれている certbot-dns-rfc2136 により、rfc2136を使用できます。また、TXT レコードの動的更新を許可するように DNS サーバーを設定する必要があります。

==== rfc2136 用に BIND を設定 ====

TSIG 秘密鍵を生成します:

$ tsig-keygen -a HMAC-SHA512 '''example-key'''

設定ファイルに追加します:

{{hc|1=/etc/named.conf|
2=...
zone "'''domain.ltd'''" IN {
...
// this is for certbot
update-policy {
grant '''example-key''' name _acme-challenge.'''domain.ltd'''. txt;
};
...
};

key "'''example-key'''" {
algorithm hmac-sha512;
secret "'''a_secret_key'''";
};
...}}

{{ic|named.service}} を [[systemd#ユニットを使う|再起動]] します。

==== certbot rfc2136 のための設定 ====

rfc2136 プラグインの設定ファイルを作成します。

{{hc|1=/etc/letsencrypt/rfc2136.ini|
2=dns_rfc2136_server = '''IP.ADD.RE.SS'''
dns_rfc2136_name = '''example-key'''
dns_rfc2136_secret = '''INSERT_KEY_WITHOUT_QUOTES'''
dns_rfc2136_algorithm = HMAC-SHA512}}

ファイルには秘密鍵のコピーが含まれているため、[[chmod]] で、グループやその他の権限を削除してファイルを保護します。

以下のようにテストします:
# certbot certonly --dns-rfc2136 --force-renewal --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --server https://acme-v02.api.letsencrypt.org/directory --email '''example@domain.ltd''' --agree-tos --no-eff-email -d ''''domain.ltd'''' -d ''''*.domain.ltd''''

検証に合格して証明書を受け取った場合は、certbot の自動化を行っても問題ありません。そうでない場合は、問題が発生しているので、設定をデバッグする必要があります。基本的には、{{ic|certbot renew}} を実行することになります。[[#自動更新]] を参照してください。


== 参照 ==
== 参照 ==


* [https://community.letsencrypt.org/t/list-of-client-implementations/2103 ACME クライアントの一覧]
* [[Transport Layer Security#ACME クライアント]]
* [[Wikipedia:ja:Let's Encrypt|Wikipedia の記事]]
* [https://certbot.eff.org/ EFF の Certbot ドキュメント]
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]

{{TranslationStatus|Certbot|2021-10-20|694739}}

2024年8月14日 (水) 21:43時点における最新版

Certbot は Python で書かれた Electronic Frontier FoundationACME クライアントで、Python で記述されており、ウェブサーバの自動設定や HTTP チャレンジのためのビルトイン Web サーバといった便利な機能を持ちます。 Certbot は Let's Encrypt に推奨されています。

インストール

certbot パッケージをインストールしてください。

発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:

設定

証明を作成と使用方法についての詳細は Certbot のドキュメント を参照してください。

プラグイン

警告 プラグインを使用すると設定ファイルが上書きされ、Certbot 証明書の設定とパスが追加される場合があります。先に設定ファイルのバックアップを作成することを推奨します。

Nginx

certbot-nginx プラグインは nginx の自動設定を提供します。このプラグインは、各ドメインの設定を検出しようとします。このプラグインは、セキュリティのために推奨される追加の設定および Certbot 証明書へのパスを追加します。例として、#サーバーブロックの管理 を参照してください。

サーバーブロックを初めて設定する場合:

# certbot --nginx

証明書を更新するには:

# certbot renew

nginx の設定ファイルに手を加えずに証明書を変更するには:

# certbot --nginx certonly

詳しい情報は Nginx on Arch Linux を見てください。インストールされた証明書の状態を有効に保つ方法は#自動更新を見てください。

Nginx サーバーブロックの管理

サーバーブロックを手動で管理する場合、以下のようにサーバーブロックで使うことができます:

/etc/nginx/sites-available/example
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2; # Listen on IPv6
  ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  ..
}

詳しくは nginx#TLS/SSL を見てください。

別の設定ファイルを作成してサーバーブロックから include して使用することも可能です:

/etc/nginx/conf/001-cerbot.conf
ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
/etc/nginx/sites-available/example
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2; # Listen on IPv6
  include conf/001-certbot.conf;
  ..
}

Apache

certbot-apache プラグインは、Apache HTTP Server の自動設定を提供します。このプラグインは、各ドメインの設定を検出しようとします。このプラグインは、セキュリティのために推奨される追加設定、証明書を使用するための設定、certbot 証明書へのパスを追加します。サンプルについては、#Apache バーチャルホストの管理 を参照してください。

バーチャルホスト の初回セットアップ:

# certbot --apache

証明書の更新:

# certbot renew

Apache 設定ファイルを変更せずに証明書の変更:

# certbot --apache certonly

詳細は Certbot-Apache on Arch Linux#自動更新 を参照してください。

Apache バーチャルホストの管理

これらのファイルを手動で管理する場合は、以下の例をすべての バーチャルホスト で使用することができます:

/etc/httpd/conf/extra/001-certbot.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/'domain'/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/'domain'/privkey.pem

</VirtualHost>
</IfModule>
/etc/httpd/conf/httpd.conf
  <IfModule mod_ssl.c>
  Listen 443
  </IfModule>

  Include conf/extra/001-certbot.conf
  ..

詳細については、Apache HTTP Server#TLS を参照してください。

Webroot

ノート
  • Webroot 方式では Certbot で認証するためにポート 80 で HTTP 接続できるようにする必要があります。
  • サーバーの名前は DNS と一致している必要があります。
  • http://domain.tld/.well-known の読み取りを許可するためにホストのパーミッションを修正する必要がある場合があります。

webroot 方式を使う場合、Certbot クライアントは /path/to/domain.tld/html/.well-known/acme-challenge/ の中でチャレンジ・レスポンス認証を行います。

手動でインストールする場合と比べて、自動で証明書を更新したり楽に管理することができます。ただし、#プラグインを使う時のように自動設定・自動インストールはできません。

ACME チャレンジリクエストのマッピング

.well-known/acme-challenge に対する HTTP リクエストを全てひとつのディレクトリ (例: /var/lib/letsencrypt) にマッピングすることで管理が簡単になります。

Certbot やウェブサーバー (http ユーザーで動作する nginxApache など) が書き込みできるパスを使用してください:

# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp http /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt
nginx

location ブロックを記述したファイルを作成してサーバーブロックから読み込むようにしてください:

/etc/nginx/conf.d/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

サーバー設定の例:

/etc/nginx/servers-available/domain.conf
server {
  server_name domain.tld
   ..
  include conf.d/letsencrypt.conf;
}
Apache

/etc/httpd/conf/extra/httpd-acme.conf ファイルを作成してください:

/etc/httpd/conf/extra/httpd-acme.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

/etc/httpd/conf/httpd.conf で上記ファイルを読み込んでください:

/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf

証明書の取得

公開パスとして /var/lib/letsencrypt/ を使用して domain.tld の証明書を取得するには:

# certbot certonly --email email@example.com --webroot -w /var/lib/letsencrypt/ -d domain.tld

(サブ)ドメインを追加するときは、登録済みの全てのドメインを一緒に指定します:

# certbot certonly --email email@example.com --webroot -w /var/lib/letsencrypt/ -d domain.tld,sub.domain.tld

登録している証明書を(全て)更新するには:

# certbot renew
ノート Do not forget to include the Let's Encrypt configuration file inside all related server blocks, those handling HTTP traffic as well as those handling HTTPS traffic, especially when using - as recommended - HSTS (HTPP Strict Transport Security). This can lead one to obtain certificate(s) smoothly, and once the setup is done, to be blocked for the renewal.

証明書の更新方法については#自動更新も参照。

手動

ウェブサーバーのプラグインが存在しない場合、以下のコマンドを使ってください:

# certbot certonly --manual

DNS の TXT レコードを利用して認証したい場合、以下のコマンドを使ってください:

# certbot certonly --manual --preferred-challenges dns

上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は /etc/letsencrypt/archive/your.domain/ に保存され、/etc/letsencrypt/live/your.domain/ からリンクが張られます。

証明書が取得できたら手動でウェブサーバーを設定して、シンボリックリンクが存在するディレクトリの秘密鍵・証明書・証明書チェーンを参照してください。

ノート 上のコマンドを複数回実行したり証明書を更新したりするとファイル名の末尾に数字が付加されたファイルが /etc/letsencrypt/archive/your.domain/ に作られます。Certbot は /etc/letsencrypt/live/your.domain/ のシンボリックリンクを自動的に最新のファイルに更新するため、証明書を更新するたびに手動でウェブサーバーの設定を更新する必要はありません。

高度な設定

自動更新

systemd

certbot.service ユニットを作成:

/etc/systemd/system/certbot.service
[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos

プラグインを使わずにウェブサーバーの設定を自動で管理する場合、ウェブサーバーを手動でリロードして証明書が更新されるたびにリロードが必要です。ExecStart コマンドに --post-hook "systemctl reload nginx.service" を追加することでリロードさせることができます [1]。適宜 nginx.service のかわりに httpd.service を使ってください。

ノート タイマーを追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。サービスは遅延があるため、v0.29.0 以降、certbot を非対話的に呼び出す際に遅延が追加されているため、サービスが完了するまでに最大480秒かかることがありますので、ご注意ください。

1 日 2 回のランダムな遅延時間を設定された証明書の更新をチェックするタイマーの追加により、全員の更新要求が分散され、Let's Encrypt サーバーの負荷が軽減されます。

/etc/systemd/system/certbot.timer
[Unit]
Description=Daily renewal of Let's Encrypt's certificates

[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target

certbot.timer起動有効化してください。

ワイルドカード証明書の自動更新

手順はかなり簡単です。ワイルドカード証明書を発行するには、ACMEv2 protocol を使用して、DNS チャレンジリクエストを経由しなければなりません。

証明書を手動で発行するのは簡単ですが、自動化は簡単ではありません。DNS チャレンジは、certbot によって与えられた TXT レコードを表し、ドメインゾーンファイルに手動で設定する必要があります。

更新のたびにゾーンファイルを更新する必要があります。これを手動で行わないようにするには、certbot のプラグインが含まれている certbot-dns-rfc2136 により、rfc2136を使用できます。また、TXT レコードの動的更新を許可するように DNS サーバーを設定する必要があります。

rfc2136 用に BIND を設定

TSIG 秘密鍵を生成します:

$ tsig-keygen -a HMAC-SHA512 example-key

設定ファイルに追加します:

/etc/named.conf
...
zone "domain.ltd" IN {
        ...
        // this is for certbot
        update-policy {
                grant example-key name _acme-challenge.domain.ltd. txt;
        };
        ...
};

key "example-key" {
        algorithm hmac-sha512;
        secret "a_secret_key";
};
...

named.service再起動 します。

certbot rfc2136 のための設定

rfc2136 プラグインの設定ファイルを作成します。

/etc/letsencrypt/rfc2136.ini
dns_rfc2136_server = IP.ADD.RE.SS
dns_rfc2136_name = example-key
dns_rfc2136_secret = INSERT_KEY_WITHOUT_QUOTES
dns_rfc2136_algorithm = HMAC-SHA512

ファイルには秘密鍵のコピーが含まれているため、chmod で、グループやその他の権限を削除してファイルを保護します。

以下のようにテストします:

# certbot certonly --dns-rfc2136 --force-renewal --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --server https://acme-v02.api.letsencrypt.org/directory --email example@domain.ltd --agree-tos --no-eff-email -d 'domain.ltd' -d '*.domain.ltd'

検証に合格して証明書を受け取った場合は、certbot の自動化を行っても問題ありません。そうでない場合は、問題が発生しているので、設定をデバッグする必要があります。基本的には、certbot renew を実行することになります。#自動更新 を参照してください。

参照

翻訳ステータス: このページは en:Certbot の翻訳バージョンです。最後の翻訳日は 2021-10-20 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。