集中化された証明書の更新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行強のコード」です。 私たちは、コメント、質問、批判、コメントに喜んでお答えします。








All Articles