コンテンツにスキップ

「Certbot」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
systemd: 自動起動のスクリプトの記述を修正
カテゴリを変更
 
(5人の利用者による、間の35版が非表示)
1行目: 1行目:
[[Category:ネットワーク]]
[[Category:ネットワーク]]
[[Category:暗号化]]
[[Category:暗号化]]
[[Category:コマンド]]
[[en:Let’s Encrypt]]
[[Category:電子フロンティア財団]]
[[ru:Let’s Encrypt]]
[[en:Certbot]]
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。
[[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''' という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。


== インストール ==
== インストール ==
11行目: 11行目:
{{Pkg|certbot}} パッケージを[[インストール]]してください。
{{Pkg|certbot}} パッケージを[[インストール]]してください。


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


== 設定 ==
== 設定 ==


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


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


==== Nginx ====
{{Note|
* Webroot 方式では Certbot で認証するのにポート 80 で HTTP 接続する必要があります。
** ポート 443 で HTTPS 接続を使って Certbot で認証するには、Webroot (''--webroot'') 方式の代わりに Nginx (''--nginx'') または Apache (''--apache'') プラグインを使用する必要があります。
* サーバー名は DNS 名と一致していなければなりません。
* ホスト上のパーミッションを修正して {{ic|<nowiki>http://domain.tld/.well-known</nowiki>}} への読み取り許可を与える必要があります。
}}


{{pkg|certbot-nginx}} プラグインは [[nginx]] の自動設定を提供します。このプラグインは、各ドメインの設定を検出しようとします。このプラグインは、セキュリティのために推奨される追加の設定および Certbot 証明書へのパスを追加します。例として、[[#サーバーブロックの管理]] を参照してください。
Webroot 方式では、Certbot クライアントによって {{ic|/path/to/domain.tld/html/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証が行われます。


[[nginx#サーバーブロック|サーバーブロック]]を初めて設定する場合:
この使用方法は手動インストールよりも推奨されます。自動的に更新が行なわれ、証明書管理が容易になります。


# certbot --nginx
{{Tip|1=始めて証明書を取得するときは以下の [[Nginx#サーバーブロック|nginx サーバー]]設定が役に立つでしょう:

{{hc|/etc/nginx/servers-available/domain.tld|<nowiki>
証明書を更新するには:

# certbot renew

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

# certbot --nginx certonly

詳しい情報は [https://certbot.eff.org/#arch-nginx Nginx on Arch Linux] を見てください。インストールされた証明書の状態を有効に保つ方法は[[#自動更新]]を見てください。

===== Nginx サーバーブロックの管理 =====
サーバーブロックを手動で管理する場合、以下のように[[nginx#サーバーブロック|サーバーブロック]]で使うことができます:
{{hc|/etc/nginx/sites-available/example|2=
server {
server {
listen 80;
listen 443 ssl http2;
listen [::]:80;
listen [::]:443 ssl http2; # Listen on IPv6
ssl_certificate /etc/letsencrypt/live/''domain''/fullchain.pem; # managed by Certbot
server_name domain.tld;
ssl_certificate_key /etc/letsencrypt/live/''domain''/privkey.pem; # managed by Certbot
root /usr/share/nginx/html;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
index index.htm index.html;
}
..
} }}


詳しくは [[nginx#TLS/SSL]] を見てください。
# ACME challenge
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/lib/letsencrypt;
}
}</nowiki>}}
}}


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


{{hc|/etc/nginx/conf/001-cerbot.conf|2=
公開パスとして {{ic|/var/lib/letsencrypt/}} を使って {{ic|domain.tld}} の証明書を取得するには:
ssl_certificate /etc/letsencrypt/live/''domain''/fullchain.pem; # managed by Certbot
# certbot certonly --email ''email@example.com'' --webroot -w ''/var/lib/letsencrypt/'' -d ''domain.tld''
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>
(サブ)ドメインを追加する場合、登録済みの全てのドメインを一緒に指定します:
server {
# certbot certonly --email ''email@example.com'' --webroot -w ''/var/lib/letsencrypt/'' -d ''domain.tld,sub.domain.tld''
listen 443 ssl http2;
listen [::]:443 ssl http2; # Listen on IPv6
include conf/001-certbot.conf;
..
}
</nowiki>}}


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


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


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


# certbot --apache
{{Note|
* この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。
* この方法では、自動的に証明書を更新することはできません。自動更新を行いたい場合には、[[#Webroot]] メソッドを使用してください。}}


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


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


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


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


詳細は [https://certbot.eff.org/#arch-apache Certbot-Apache on Arch Linux] と [[#自動更新]] を参照してください。
{{Note|コマンドを複数回実行すると {{ic|/etc/letsencrypt/live/''your.domain''/}} に作られるファイルの名前には末尾に数字が付加されます。作成されたファイル名かウェブサーバーの設定を書き換える必要があります。}}


===== Apache バーチャルホストの管理 =====
== 高度な設定 ==


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


{{hc|/etc/httpd/conf/extra/001-certbot.conf|2=
プラグインを使用して自動で設定するのではなく、サーバーの SSL を手動で有効にすることが推奨される場合があります。
<IfModule mod_ssl.c>
<VirtualHost *:443>


Include /etc/letsencrypt/options-ssl-apache.conf
{{Tip|
SSLCertificateFile /etc/letsencrypt/live/'domain'/fullchain.pem
* Mozilla には有用な [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS についての記事] があり、セキュアな設定を作成するための [https://mozilla.github.io/server-side-tls/ssl-config-generator/ 自動ツール] もあります。
SSLCertificateKeyFile /etc/letsencrypt/live/'domain'/privkey.pem
* [https://cipherli.st Cipherli.st] には最新のウェブサーバーのため強固な SSL の設定例とチュートリアルが載っています。

</VirtualHost>
</IfModule>
}}
}}


{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
==== nginx ====
<IfModule mod_ssl.c>
Let's Encrypt の署名済み SSL 証明書を使用するサーバー {{ic|domain.tld}} の例:
Listen 443
</IfModule>


Include conf/extra/001-certbot.conf
{{hc|/etc/nginx/servers-available/domain.tld|<nowiki>
# redirect to https
server {
listen 80;
listen [::]:80;
server_name domain.tld;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name domain.tld;
..
..
</nowiki>}}
}


詳細については、[[Apache HTTP Server#TLS]] を参照してください。
# A subdomain uses the same SSL-certifcate:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
..
server_name sub.domain.tld;
..
}


=== Webroot ===
# ACME challenge
{{Note|
location ^~ /.well-known {
* Webroot 方式では Certbot で認証するために'''ポート 80 で HTTP 接続'''できるようにする必要があります。
allow all;
* サーバーの名前は DNS と一致している必要があります。
alias /var/lib/letsencrypt/.well-known/;
* {{ic|http://domain.tld/.well-known}} の読み取りを許可するためにホストのパーミッションを修正する必要がある場合があります。
default_type "text/plain";
}}
try_files $uri =404;
}
</nowiki>}}


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


手動でインストールする場合と比べて、自動で証明書を更新したり楽に管理することができます。ただし、[[#プラグイン]]を使う時のように自動設定・自動インストールはできません。
{{ic|/.well-known/acme-challenge/}} への HTTP リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。

==== ACME チャレンジリクエストのマッピング ====
Let's Encrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります ([[nginx]] や [[Apache]] の場合 ''http'' ユーザー):

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

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


==== nginx ====
===== nginx =====

まず location ブロックを記述したファイルを作成します:


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


サーバー設定の例:
そして server ブロックの中で作成したファイルを指定します:
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki>
{{hc|/etc/nginx/servers-available/domain.conf|<nowiki>
server {
server {
174行目: 159行目:
</nowiki>}}
</nowiki>}}


==== Apache ====
===== Apache =====

{{ic|/etc/httpd/conf/extra/httpd-acme.conf}} ファイルを作成してください:
{{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/"
187行目: 170行目:
</nowiki>}}
</nowiki>}}


そして、{{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>}}

==== 証明書の取得 ====

公開パスとして {{ic|/var/lib/letsencrypt/}} を使用して {{ic|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

{{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''/}} のシンボリックリンクを自動的に最新のファイルに更新するため、証明書を更新するたびに手動でウェブサーバーの設定を更新する必要はありません。}}

== 高度な設定 ==


=== 自動更新 ===
=== 自動更新 ===
206行目: 219行目:
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}


プラグインを使用してWebサーバーの設定を自動的に管理しない場合、証明書が更新されるたびに手動でWebサーバーをロードして証明書を再ロードする必要があります。 これは、{{ic|ExecStart}}コマンド[https://certbot.eff.org/docs/using.html#renewing-certificates] に {{ic|--deploy-hook "systemctl reload nginx.service"}} を追加することで実行できます。 もちろん、必要に応じて{{ic|nginx.service}}のわりに{{ic|httpd.service}}を使用してください。
プラグインを使わずにウェブサーバーの設定を自動管理する場合、ウェブサーバーを手動でリロードして証明書が更新されるたびにリロード必要す。{{ic|ExecStart}} コマンドに {{ic|--post-hook "systemctl reload nginx.service"}} を追加することでリロードさせることができます [https://certbot.eff.org/docs/using.html#renewing-certificates]適宜 {{ic|nginx.service}} わりに {{ic|httpd.service}} を使てください。


{{Note|[[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|
226行目: 239行目:
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。


=== ワイルドカード証明書の自動更新 ===
==== Standalone を使う場合のサービス ====


手順はかなり簡単です。ワイルドカード証明書を発行するには、[https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579 ACMEv2 protocol を使用]して、DNS チャレンジリクエストを経由しなければなりません。
Standalone モードを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。systemd の ''ExecStartPre'' と ''ExecStartPost'' を使います。


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


更新のたびにゾーンファイルを更新する必要があります。これを手動で行わないようにするには、certbot のプラグインが含まれている certbot-dns-rfc2136 により、rfc2136を使用できます。また、TXT レコードの動的更新を許可するように DNS サーバーを設定する必要があります。
{{hc|1=/etc/systemd/system/certbot.service|
2=[Unit]
Description=Let's Encrypt renewal


==== rfc2136 用に BIND を設定 ====
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
ExecStartPre=/bin/systemctl stop nginx.service
ExecStartPost=/bin/systemctl start nginx.service
}}


TSIG 秘密鍵を生成します:
===== Apache =====


$ tsig-keygen -a HMAC-SHA512 '''example-key'''
{{hc|1=/etc/systemd/system/certbot.service|
2=[Unit]
Description=Let's Encrypt renewal


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

Type=oneshot
{{hc|1=/etc/named.conf|
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
2=...
ExecStartPre=/bin/systemctl stop httpd.service
zone "'''domain.ltd'''" IN {
ExecStartPost=/bin/systemctl start httpd.service
...
}}
// 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}} を実行することになります。[[#自動更新]] を参照してください。


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


* [[Transport Layer Security#ACME クライアント]]
* [[Wikipedia:ja:Let's Encrypt|Wikipedia の記事]]
* [https://certbot.eff.org/ EFF の Certbot ドキュメント]
* [https://certbot.eff.org/ EFF の Certbot ドキュメント]
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]
* [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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。