danvaida.letsencrypt

ビルドステータス Galaxy

Ansible Let's Encrypt ロール

Let's Encrypt から ACME を使用して TLS 証明書を取得します。

チャレンジを完了し、証明書を取得した後は、選択したウェブサーバーに設定する責任があります。

要件

  • openssl
  • Python >= 2.7.9

ロール変数

  • letsencrypt_certs_dir: すべての CSR、キー、および証明書が保存される作業ディレクトリへのパス。

  • letsencrypt_account_key_name: Let's Encrypt アカウントの RSA キーの名前。

  • letsencrypt_account_key_size: Let's Encrypt アカウントの RSA キーのサイズ。

  • letsencrypt_certs_to_generate: 生成する証明書のリスト。

    • account_email: ACME サーバーとの交換に使用されるメールアドレス。証明書の有効期限についての警告が届きます。

    • account_key: RSA キーのファイルパス。

    • acme_directory: ACME API のエンドポイント。デフォルトでは Let's Encrypt のステージングを使用します。

    • agreement: 同意する利用規約の URI。

    • challenge: 受け入れられるチャレンジの種類。

    • csr: CSR ファイルのパス。

    • dest: 生成された証明書ファイルの保存先パス。

    • remaining_days: 証明書が有効な日数。

依存関係

該当なし

例 Playbook

この例では、Let's Encrypt から証明書をリクエストしていますが、理論的にはこの Ansible モジュールは任意の ACME サーバーと互換性があります。

3つのプレイがあります:

  1. CSR、キーを作成し、証明書の発行リクエストを行います。
  2. チャレンジを完了します(この場合は Route53 の DNS レコード)。
  3. チャレンジを検証し、証明書を発行するように依頼します。
    - name: ACME ステップ 1
      hosts: localhost
      connection: local
      roles:
        - role: letsencrypt
          letsencrypt_certs_dir:         './files/production/certs'
          letsencrypt_account_key_name:  'letsencrypt_account'
          letsencrypt_account_key_size:  2048
          letsencrypt_certs_to_generate:
            - domain: 'your-domain.com'
              key_size: 2048
              account_email: '[email protected]'
              account_key: "{{ letsencrypt_certs_dir }}/{{ letsencrypt_account_key_name }}.key"
              challenge: 'dns-01'
              agreement: 'https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf'
              csr: "{{ letsencrypt_certs_dir }}/your-domain.com/your.csr"
              dest: "{{ letsencrypt_certs_dir }}/your-domain.com/domain.crt"
              acme_directory: 'https://acme-v01.api.letsencrypt.org/directory'
          tags: letsencrypt

      tasks:
        - name: Route53に追加するレコードを設定する必要があります
          set_fact:
            route53_records_to_add: "{{
              route53_records_to_add | default([]) +
              [{'zone': item.1.domain,
              'record': item.0.challenge_data[item.1.domain]['dns-01']['resource'] + '.' + item.1.domain + '.',
              'ttl': 300,
              'type': 'TXT',
              'value': '\"' + item.0.challenge_data[item.1.domain]['dns-01']['resource_value'] + '\"' }]
              }}"
          with_together:
            - "{{ letsencrypt_acme_step_one }}"
            - "{{ letsencrypt_certs_to_obtain | default([]) }}"
          when: item.1.domain == item.0.item.domain
          tags: route53

    - name: ACME チャレンジ解決 (Route53  DNS レコード)
      hosts: localhost
      connection: local
      roles:
        - role: route53
          tags: route53

    - name: ACME ステップ 2
      hosts: localhost
      connection: local
      pre_tasks:
        - name: DNS の変更が伝播するまで待つ必要があります
          pause: minutes=1

      roles:
        - role: letsencrypt
          letsencrypt_acme_step: two
          tags: letsencrypt

他のチャレンジタイプを完了するのは、同じであり、このロールに対しては不透明です。

テスト

テストは DNS チャレンジタイプに依存しており、AWS Route53 を介して解決されます。

提供された Docker 環境でテストを実行したい場合は、次のコマンドを実行してください:

$ cd /path/to/ansible-roles/letsencrypt
$ ansible-galaxy install \
    --force \
    --role-file=./tests/requirements.yml \
    --roles-path=./tests/dependencies
$ docker build \
    --no-cache \
    --pull \
    --tag ansible-roles-test \
    tests/support
$ docker run \
    --rm \
    --interactive \
    --tty \
    --volume $PWD:/etc/ansible/roles/letsencrypt \
    --volume $PWD/tests/dependencies:/etc/ansible/roles/letsencrypt/tests/roles:ro \
    --env AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
    --env AWS_SECRET_KEY=$AWS_SECRET_KEY \
    --workdir /etc/ansible/roles/letsencrypt/tests \
    ansible-roles-test

To-do

  • 他のチャレンジタイプのサポート
  • 他の DNS サービス API のサポート(例:Cloud DNS
  • 一部のウェブサーバーロールとの統合(例:NGINX、Apache)
  • 更新のサポート
  • 複数の Ansible バージョンとディストリビューションのサポート
  • DNS チャレンジのために合意が必要ないように、テスト用の Docker イメージで Ansible を更新します。

ライセンス

このプロジェクトは GNU GPL v3.0 ライセンスの条件に基づいてライセンスされています。

著者情報

このロールは Dan Vaida によって作成されました。

貢献

ToDo リストを参照してください。貢献を歓迎します。

プロジェクトについて

Obtains TLS certificates through ACME from Let's Encrypt.

インストール
ansible-galaxy install danvaida.letsencrypt
ライセンス
lgpl-3.0
ダウンロード
225
所有者
sysadmin & solutions architect