集中化された証明書の更新Let's Encrypt

letsencruptサーバー


みなさんこんにちは!


この記事では、Let's Encrypt証明書を一元的に更新し、ansibleを使用してインフラストラクチャを管理する問題をどのように解決したかについて説明します。


このソリューションでは次を使用します。



ソリューションが役立つ2つのアーキテクチャオプションを提供します。 次に、コメントでオプションを提案できます。


オプション1:複数のドメインにサービスを提供するパブリックIP(3など)を持つ複数のフロントエンドサーバーがあります。 これらのドメインは追加/削除できます。 各フロントエンドサーバーを監視しないようにするには、1つのletsencrypt serverこれを行う方が便利です。


例1


オプション2:パブリックIPを持つサーバーは1つだけで、ネットワーク内のサーバーに証明書が必要です。


例2


Ansibleロールの説明


役割のあるリポジトリはこちらから入手できます


リポジトリには4つのロールがあります。



練習に移りましょう:


初期設定


最初は、次のものがあります。



Ubuntu 16.04はすべてのサーバーにインストールされます。


nginxをインストールして構成する


まず、 nginx-simple共通の役割からすべてのホストにnginxをインストールし、すべてのホストに共通のnginx構成(nginx.conf、sslパラメーター、証明書パスなど)を展開します。


テンプレートでletsencrypt Server用の.../site-available/default.confフォルダ.well_knownに配置されます/var/www/


 {% if letsencrypt_server %} location /.well-known { root /var/www/; } 

frontグループのサーバーでは、 .well_knownフォルダー.well_known証明書の取得だけでなく他のソフトウェアにも使用されるため、 example.conf letsencrypt-proxy.confインポートし、nginxはtry_file try_fileを使用してフロントサーバー上のフォルダーをローカルに検索します:


 {% if nginx_proxy_well_known %} try_files $uri $uri/ @letsencrypt; {% endif %} 

インベントリの変数に応じて、ドメインの構成が書き込まれます。 リポジトリでは、これはexample.comドメインです


また、 letsencrypt_server変数に応じて、 nginx-simpleロールはletsbotcryptサーバーにcertbotをインストールし、cronタスクを追加して証明書を更新します。


証明書を取得する


我々はレッツ・暗号化からワイルドカード証明書の前にこの問題を解決しているので、我々は、証明書を取得するために両方のオプションを検討します。


letsencryptサーバーサーバーでは、次のことを行います。


 certbot certonly --agree-tos -d example.ru --webroot -w /var/www/ 

複数のドメインがある場合は、 -dスイッチを使用して次のドメインを追加します。


ワイルドカード証明書を取得するには、DNS TXTにレコードを追加する必要があります。 現時点では、これがそのような証明書を取得する唯一の方法です。


 certbot certonly --agree-tos -d example.ru -d *.example.ru --preferred-challenges dns --manual --server https://acme-v02.api.letsencrypt.org/directory 

Certbotは、追加する必要があるTXTレコードを書き込みます。


証明書の更新


証明書を取得しましたが、それらをフロントサーバー/サーバーにコピーするように構成します。 これを行うために、我々は設定しますrsyncd IPアドレスの制限されたリストへの読み取りアクセス権を持つサーバーletsencryptを:


 hosts allow = {{ hosts_allow }} hosts deny = * list = true use chroot = no [cert] path = /etc/letsencrypt/live/ uid = root gid = root read only = true 

5分ごとに、フロントサーバーからのcronタスクは、証明書が更新されたかどうかを確認し、それらを取得します。 なぜなら 証明書はローテーションされ、 /etc/letsencrypt/live/{{ domain }}/etc/letsencrypt/live/{{ domain }}フォルダーにあります。 -Lスイッチを追加して、元のファイルを引き出します。


 /usr/bin/rsync -zavL --chmod=D0750,F640 --delete rsync://{{ hostvars['letsencrypt-server'].ansible_eth0.ipv4.address }}/cert /etc/letsencrypt/live/ 

nginxのフック


nginxを構成し、証明書を受け取って、フロントサーバーに持っていきました。 これは、ファイルがフォルダ内にあるかを決定するために残っている/etc/letsencrypt/live/{{ domain }} {ドメイン}}変更やフックを実行nginx -s reload


Linuxのinotifyカーネルサブシステムとincronデーモンがこれに役立ちます。 それらについての詳細はこちらをご覧ください


役割はincronパッケージをインストールすると、テンプレートの役割front 、モニター、正しい証明書をフックにタスクを追加します。


 /etc/letsencrypt/live/{{ domain }}/ IN_CREATE,IN_DELETE,IN_MODIFY,IN_MOVED_TO nginx -s reload 

結論として


私たちは、インストールおよび構成プロセス全体を詳細に説明しようとしました。 すべてがansibleプレイブックに記述されています-記事は非常にコンパクトであることが判明しました。 彼らがよく言うのは、「100行強のコード」です。 私たちは、コメント、質問、批判、コメントに喜んでお答えします。



Source: https://habr.com/ru/post/J352720/


All Articles