「Certbot」の版間の差分
(同期) |
|||
1行目: | 1行目: | ||
[[Category:ネットワーク]] |
[[Category:ネットワーク]] |
||
− | [[Category: |
+ | [[Category:暗号化]] |
[[en:Let’s Encrypt]] |
[[en:Let’s Encrypt]] |
||
[[ru:Let’s Encrypt]] |
[[ru:Let’s Encrypt]] |
||
231行目: | 231行目: | ||
==== Standalone を使う場合のサービス ==== |
==== Standalone を使う場合のサービス ==== |
||
− | Standalone モードを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。 |
+ | Standalone モードを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。systemd の ''ExecStartPre'' と ''ExecStartPost'' を使います。 |
===== nginx ===== |
===== nginx ===== |
||
241行目: | 241行目: | ||
[Service] |
[Service] |
||
Type=oneshot |
Type=oneshot |
||
− | ExecStart=/usr/bin/certbot renew -- |
+ | ExecStart=/usr/bin/certbot renew --quiet --agree-tos |
+ | ExecStartPre=/bin/systemctl stop nginx.service |
||
+ | ExecStartPost=/bin/systemctl start nginx.service |
||
+ | }} |
||
===== Apache ===== |
===== Apache ===== |
||
251行目: | 254行目: | ||
[Service] |
[Service] |
||
Type=oneshot |
Type=oneshot |
||
− | ExecStart=/usr/bin/certbot renew |
+ | ExecStart=/usr/bin/certbot renew --quiet --agree-tos |
+ | ExecStartPre=/bin/systemctl stop httpd.service |
||
+ | ExecStartPost=/bin/systemctl start httpd.service |
||
+ | }} |
||
== 参照 == |
== 参照 == |
2017年11月2日 (木) 00:08時点における版
Let’s Encrypt はフリーかつ自動化されたオープンな認証局です。ACME プロトコルを利用しています。
公式クライアントは Certbot という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを acme-tinyAUR でインストールすることができます。スクリプトで使用するのに適したクライアントとして simp_le-gitAUR や letsencrypt-cliAUR も存在します。
目次
インストール
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:
- Nginx 用の実験的なプラグインは certbot-nginx パッケージに入っています。
- Apache HTTP Server 利用時の自動インストールは certbot-apache パッケージで使えます。
設定
証明を作成・インストールする方法は Certbot のドキュメント を参照してください。
Webroot
Webroot 方式では、Certbot クライアントによって /path/to/domain.tld/html/.well-known/acme-challenge/
でチャレンジ/レスポンス認証が行われます。
この使用方法は手動インストールよりも推奨されます。自動的に更新が行なわれ、証明書管理が容易になります。
証明書の取得
公開パスとして /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
証明書の更新方法については#自動更新も参照。
手動
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:
# certbot certonly --manual
DNS の TXT レコードを利用した認証を行う場合、次のコマンドを使って下さい:
# certbot certonly --manual --preferred-challenges dns
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は /etc/letsencrypt/live/your.domain/
に保存されます。
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。
高度な設定
ウェブサーバーの設定
プラグインを使用して自動で設定するのではなく、サーバーの SSL を手動で有効にすることが推奨される場合があります。
nginx
Let's Encrypt の署名済み SSL 証明書を使用するサーバー domain.tld
の例:
/etc/nginx/servers-available/domain.tld
# 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; .. } # 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; .. } # ACME challenge location ^~ /.well-known { allow all; alias /var/lib/letsencrypt/.well-known/; default_type "text/plain"; try_files $uri =404; }
マルチドメイン
/.well-known/acme-challenge/
への HTTP リクエストを全て一つのフォルダ (例: /var/lib/letsencrypt
) にまとめることで、マルチドメインの管理がとても楽になります。
Let's Encrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります (nginx や Apache の場合 http ユーザー):
# 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 { allow all; alias /var/lib/letsencrypt/.well-known/; default_type "text/plain"; try_files $uri =404; }
そして server ブロックの中で作成したファイルを指定します:
/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>
そして、httpd.conf
で上記ファイルをインクルードします:
/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf
自動更新
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
証明書を更新するたびにウェブサーバーを再起動させると良いでしょう。certbot.service
ファイルに以下のどちらかの行を追加してください:
- Apache:
ExecStartPost=/bin/systemctl reload httpd.service
- nginx:
ExecStartPost=/bin/systemctl reload nginx.service
それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)。
/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
Standalone を使う場合のサービス
Standalone モードを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。systemd の ExecStartPre と ExecStartPost を使います。
nginx
/etc/systemd/system/certbot.service
[Unit] Description=Let's Encrypt renewal [Service] Type=oneshot ExecStart=/usr/bin/certbot renew --quiet --agree-tos ExecStartPre=/bin/systemctl stop nginx.service ExecStartPost=/bin/systemctl start nginx.service
Apache
/etc/systemd/system/certbot.service
[Unit] Description=Let's Encrypt renewal [Service] Type=oneshot ExecStart=/usr/bin/certbot renew --quiet --agree-tos ExecStartPre=/bin/systemctl stop httpd.service ExecStartPost=/bin/systemctl start httpd.service