
Certbotを使用して、基盤となるインフラストラクチャが制御される半自動セットアップが可能かどうかをお聞きしたいのですが自分Certbot によるものではありません。
Certbot は Let's Encrypt と通信してチャレンジを発行しますが、これは基本的に、Certbot が私の IP アドレスまたは DNS で見つける必要のあるトークンです。
私は Apache サーバーを完全に制御していますが、これは非常にカスタマイズされたマルチホスティング設定 (SNI が必要) であり、Certbot が私の Apache 構成を台無しにしたり、root として実行したりすることは望んでいません。sudoers については後で説明します。
私はすでにホスティングスペースを設定しておりmta-sts.example.org
、実装中ですメール転送エージェントの厳格なトランスポートセキュリティ
私はマクロを使ってApacheにそれが/home/djechelon/srv/www/domains/mta-sts.example.org
私のワークスペースであることを伝えました
- htdocs: HTTP経由で提供されるコンテンツ
- htdocs-secure: HTTPS 経由で提供されるコンテンツ
- ログ: Apache VHost ログ
- ssl: ここが
mta-sts.example.org.{key,crt,ca_bundle?}
存在する場所
Certbotに次のことを実行してほしい
- LEからチャレンジを獲得
- チャレンジを適切なファイルに書き込む
/home/djechelon/..../htdocs
と、Apacheはそれを提供する準備が整います。 - LEにチャレンジを検証するよう依頼してください。Apacheは挑戦する準備はできている
- 証明書を書き込みます
/home/djechelon/..../ssl/
。LEがca_bundleを提供していなくても問題ありません。私のところではオプションです。 - Apache をリロードします (近々 sudoers 設定が追加される予定です)
webroot
この場合、プラグインを使用する必要があることは理解していましたが、ファイルや証明書を保存する場所など、すべてのオプションのコマンド ライン ヘルプを見つけるのに苦労しました。
ドキュメントでは、プロセスが対話型であると想定されているため、チャレンジ ファイルを手動でコピーし、Certbot に LE に連絡してドメイン検証を行うように依頼する必要があります。
上記の簡単なスクリプトを実行する簡単な方法があるはずだと私は考えています。このスクリプトは、全体的な IT インフラストラクチャが存在し (たとえば、独自のサーバー ソフトウェアを実際に実行したい場合)、適切に構成されているという前提で実行されます。
何か助けて?
[編集] 今のところこれを対話的に呼び出すことができました
certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir /home/djechelon/etc/letsencrypt --logs-dir /home/djechelon/letsencrypt-logs --config-dir /home/djechelon/etc/letsencrypt
これによって、Web ルート ディレクトリと電子メール (将来の更新のためにパラメータとして渡したいもの) の入力が求められました。したがって、ここでの質問は、「今後、cron を使用して非対話的にこれを再実行するにはどうすればよいでしょうか?」となる可能性があります。
答え1
証明書をユーザーのホームディレクトリ(/home/djechelon/..../ssl/
)の下に保存しない理由は、ユーザーが証明書ファイルを削除すると、Apacheは起動に失敗するCertbot が Web サーバーの構成を変更しない方がよいというあなたの考えには同意しますが、現時点では、回避しようとしているのと同じ問題が実際に発生しているようですので、警告しようとしています。
certonly
HTTP-01 チャレンジやログ ファイルにホーム ディレクトリを使用する理由はありません。また、既に行っているようにモードで Certbot を使用して、Apache で静的構成を使用することもできます。
自動更新に対する私の解決策は、すべての HTTP-01 チャレンジに同じ作業ディレクトリを使用することです ( から/etc/letsencrypt/renewal/example.com.conf
):
# renew_before_expiry = 30 days
version = 0.31.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
account = 0123456789abcdef0123456789abcdef
rsa_key_size = 4096
[[webroot_map]]
example.com = /var/www/letsencrypt
www.example.com = /var/www/letsencrypt
この方法では、すべての課題を処理するグローバルを追加できますAlias
が、必要な仮想ホストにのみ配置することもできます。
<IfModule alias_module>
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
</IfModule>
答え2
おそらく、対話型モードは 1 回だけ実行されます。Certbot は証明書が保存されている場所を記憶しており、これは常に作業ディレクトリの下にあります。
それほど悪くはない。私の解決策は/home/djechelon/srv/..../ssl/*
シンボリックリンクに置き換えることでした
要するに:
- 通常通り仮想ホスティングを設定する
- 新しいウェブサイトの新しい証明書を取得するには、コマンドを使用します。
- Apache をリロードします (仮想ホストの設定に必要です)
- 更新時に、
certbot renew
適切な作業ディレクトリを使用して非ルートとして実行します。
発行コマンド
certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]
更新コマンド(cron
おそらく -ned 可能)
certbot renew --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]
もちろん、更新時には、少なくともApacheのリロードをスケジュールする必要があります。