martin-v.letsencryptsh

脱水

dehydratedをインストールして設定します。特権を制限するためのユーザーを作成し、証明書の更新のためのcron設定を行います。

dehydratedはあなたのプライベートキーを扱うため、慎重に扱い、このansibleロールと使用されるdehydratedスクリプトをレビューしてください。

nginxをhttpsプロキシとして使用したサンプルセットアップについては、ansibleロールmartin-v/ansible-nginx_https_onlyを参照してください。

要件

このロールはホストに以下をインストールします:

  • openssl
  • curl
  • sed
  • grep
  • mktemp
  • git

このロールは、dehydrated_challengesdirに設定されたディレクトリ(デフォルトは/var/www/dehydrated/)を、すべての証明書リクエストドメインに対してhttp://<your-domain>/.well-known/acme-challenge/の場所で提供するWebサーバーが必要です。

ロール変数

必要な変数:

dehydrated_contactemail

letsencryptアカウントのためのアドレス。主に証明書の有効期限通知のために使用されますが、cronジョブが正常に動作していれば通知は発生しません。

dehydrated_contactemail: certmaster@example.com

dehydrated_letsencrypt_agreed_terms

letsencryptの利用規約に同意するには、変数dehydrated_letsencrypt_agreed_termsを現在のライセンスURLに設定します。実際のURLはhttps://acme-v01.api.letsencrypt.org/termsで確認できます。

dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

dehydrated_domains

証明書リクエスト用のドメインのリスト。各行ごとに証明書が作成され、/etc/dehydrated/certs/フォルダーに行の最初のドメイン名で保存されます。最初のドメインが共通名となり、他のドメインは証明書の別名となります。

dehydrated_domains: |
  example.com
  example.org www.example.org blog.example.org

dehydrated_deploy_cert

証明書はapacheやdovecotなどのサービスが読み取れる必要があります。ただし、特定のサービスのみがこの証明書を読み取ることが許可されるべきです。そのため、各証明書ごとにオーナー/グループを特定の値に変更する必要があります。セキュリティ上の理由から、これはrootユーザーのみが実行できます。

汎用的な解決策として、dehydrated_deploy_certという変数があります。この変数には証明書のデプロイメントに関するbashスクリプトを含める必要があります。デプロイメント時の通常のタスクは、証明書を他のディレクトリにコピーし、ファイルのオーナー/権限を変更し、サービスを再起動することです。

このコードは通常のdehydratedフックと同様に呼び出されますが、完全なdehydratedの実行の後にroot権限で実行されます。生成された各証明書に対して一度呼び出されます。

パラメータ:

  • DOMAIN プライマリドメイン名、すなわち証明書の共通名(CN)。
  • KEYFILE (ファイル名: privkey.pem) プライベートキーを含むファイルのパス。
  • CERTFILE (ファイル名: cert.pem) サインされた証明書を含むファイルのパス。
  • FULLCHAINFILE (ファイル名: fullchain.pem) フル証明書チェーンを含むファイルのパス。
  • CHAINFILE (ファイル名: chain.pem) 中間証明書を含むファイルのパス。
  • TIMESTAMP (ファイル名: chain.pem) 指定された証明書が作成されたタイムスタンプ。

例:

dehydrated_deploy_cert: |
  mkdir -p /etc/nginx/ssl/${DOMAIN}
  cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
  chown root:root /etc/nginx/ssl/${DOMAIN}/*
  chmod 600 /etc/nginx/ssl/${DOMAIN}/*
  systemctl restart nginx.service

dehydrated_run_cron_on_every_ansible_run

このロールは、各実行時に証明書を作成または更新するためのcronスクリプトをトリガーします。この動作を無効にするには、次のように設定します:

dehydrated_run_cron_on_every_ansible_run: false

オプションの変数:

dehydrated_challengesdir

acme-challengeファイル用のディレクトリ。あなたのWebサーバーは、このディレクトリをすべての前述のドメインに対してhttp://<your-domain>/.well-known/acme-challenge/の位置で公開する必要があります。このディレクトリは存在しない場合に作成され、dehydratedユーザー専用の書き込み可能でWebサーバーによってのみ読み取り可能である必要があります。このロールによって強制されます。

dehydrated_challengesdir: /var/www/dehydrated/

さらに多くの変数

スーパーユーザーがより多くの制御を必要とするためのいくつかの珍しい変数もあります。詳細についてはdefaults/main.ymlを確認してください。

依存関係

なし。

例のプレイブック

- hosts: all
  remote_user: root
  vars_files:
    - dehydrated_vars.yml
  roles:
    - martin-v.dehydrated

例の変数ファイル

dehydrated_contactemail: [email protected]

dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

dehydrated_domains: |
  example.com
  example.org www.example.org blog.example.org

dehydrated_deploy_cert: |
  mkdir -p /etc/nginx/ssl/${DOMAIN}
  cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
  chown root:root /etc/nginx/ssl/${DOMAIN}/*
  chmod 600 /etc/nginx/ssl/${DOMAIN}/*
  systemctl restart nginx.service

ヒント

ansibleデプロイメントで証明書を作成するには、通常のcronスクリプトを呼び出すことができます:shell: "/etc/cron.weekly/dehydrated"。フォルダーtestsには、完全に動作する例が含まれています。

公式のletsencryptクライアントからのインポートについては、dehydrated import wikiページを参照してください。

未解決のタスク

ビルドステータス travis ビルドステータス semaphore

  1. より良いテストのためにmoleculeを使用してください。

ライセンス

MIT

著者情報

このロールは2016年に作成され、2017年にMartin V.によって改善されました。

プロジェクトについて

Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.

インストール
ansible-galaxy install martin-v.letsencryptsh
ライセンス
mit
ダウンロード
756
所有者
Freelance software developer and IT consultant