linux-system-roles.certificate

証明書システムロール

ansible-lint.yml ansible-test.yml codeql.yml markdownlint.yml python-unit-test.yml tft.yml tft_citest_bad.yml woke.yml

TLS/SSL証明書の発行と更新を管理するためのロール

Linuxシステムロールは、SSL証明書を発行および更新します。

基本的な使用法:

---
- hosts: webserver

  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign

  roles:
    - linux-system-roles.certificate

RPMベースのシステムでは、証明書は /etc/pki/tls/certs/mycert.crt に配置され、鍵は /etc/pki/tls/private/mycert.key に配置されます。

要件

以下を参照してください

コレクション要件

ロールは、rpm-ostree ノードの管理にのみ外部コレクションを必要とします。rpm-ostree ノードを管理する必要がある場合、以下のコマンドを実行してインストールしてください:

ansible-galaxy collection install -vv -r meta/collection-requirements.yml

変数

パラメータ 説明 必須 デフォルト
certificate_wait 証明書が発行されるまでタスクが待機するかどうか。 bool いいえ yes
certificate_requests 発行される各証明書を表す辞書のリスト。 certificate_requestsを参照してください。 list いいえ -

certificate_requests

注: common_name, country, state, locality, organization, organizational_unit, email, key_usage, extended_key_usage などのフィールドは、証明書リクエストに含まれることがあります。これらはRFC 5280によって定義されています。

注: CAは要求されたすべてのフィールドを尊重しない場合があります。例えば、リクエストにcountry: USが含まれていても、CAはcountryを持たない証明書を発行するかもしれません。

注: dns, emailipは、サブジェクト代替名(SAN)を定義するために使用されます。

パラメータ 説明 必須 デフォルト
name 証明書の名前。ファイルが保存されるディレクトリを選択するためにフルパスを使用できます。 str はい -
ca 証明書を発行するCA。 CAsとプロバイダーを参照してください。 str はい -
dns 証明書に含まれるドメイン(またはドメインのリスト)。 common_nameのデフォルト値を提供することもできます。 strまたはlist いいえ -
email 証明書に含まれるメール(またはメールのリスト)。 strまたはlist いいえ -
ip 証明書に含まれるIPまたはIPのリスト。IPはIPv4、IPv6のいずれか、または両方を含めることができます。 common_nameのデフォルト値を提供することもできます。 strまたはlist いいえ -
auto_renew 証明書が有効期限の前に自動的に更新されるべきかどうかを示します。 bool いいえ yes
owner 証明書と鍵ファイルのユーザー名(またはユーザーID)。 str いいえ Ansibleを実行しているユーザー
group 証明書と鍵ファイルのグループ名(またはグループID)。 str いいえ Ansibleを実行しているグループ
mode 証明書と鍵ファイルのファイルシステムの権限。 raw いいえ -
key_size 特定のビット数のキーサイズを持つキーを生成します。 int いいえ 2048 - key_sizeを参照
common_name 証明書のサブジェクトに要求されるコモン名。 str いいえ common_nameを参照
country 証明書のサブジェクトに要求される国コード。 str いいえ -
state 証明書のサブジェクトに要求される州。 str いいえ -
locality 証明書のサブジェクトに要求される地域(通常は都市)。 str いいえ -
organization 証明書のサブジェクトに要求される組織。 str いいえ -
organizational_unit 証明書のサブジェクトに要求される組織単位。 str いいえ -
contact_email 証明書のサブジェクトに要求される連絡先メール。 str いいえ -
key_usage 証明書のための許可されたキーの使用。 有効な値については、 key_usageをご覧ください。 list いいえ key_usageを参照
extended_key_usage 証明書リクエストに含めるべき拡張キー使用属性。 list いいえ extended_key_usageを参照
run_before 証明書を保存する前に実行するコマンド。 run hooksを参照してください。 str いいえ -
run_after 証明書を保存した後に実行するコマンド。 run hooksを参照してください。 str いいえ -
principal Kerberosプリンシパル。 str いいえ -
provider 証明書をリクエストし、管理するために使用される基本的な方法。 str いいえ CAによって異なる

common_name

common_nameが設定されていない場合、ロールは最初のdnsまたはipの値をデフォルトとして使用しようとします。 dnsipも設定されていない場合、common_nameは証明書に含まれません。

key_size

証明書のキーサイズの推奨最小値は、異なる組織によって時間とともに異なります。安全設定を提供するために、key_sizeのデフォルト最小値は時間とともに増加します。

証明書が更新される際に常に同じkey_sizeを保持したい場合は、この変数を所望の値に設定してください。

key_usage

key_usageの有効値は:

  • digitalSignature
  • nonRepudiation
  • keyEncipherment
  • dataEncipherment
  • keyAgreement
  • keyCertSign
  • cRLSign
  • encipherOnly
  • decipherOnly

key_usageのデフォルト値は:

  • digitalSignature
  • keyEncipherment

extended_key_usage

有効なOIDは1つ以上のextended_key_usageを設定するために使用できます。また、ロールによって認識される既知のエイリアスのリストもあります:

  • id-kp-serverAuth
  • id-kp-clientAuth
  • id-kp-codeSigning
  • id-kp-emailProtection
  • id-kp-timeStamping
  • id-kp-OCSPSigning
  • id-kp-ipsecEndSystem
  • id-kp-ipsecTunnel
  • id-kp-ipsecUser

extended_key_usageが設定されていない場合、ロールはデフォルトで:

  • id-kp-serverAuth
  • id-kp-clientAuth

run hooks

時々、証明書が更新される前にコマンドを実行し、その後に別のコマンドを実行する必要があります。そのためには、run_beforerun_afterを使用します。

run_beforeおよびrun_afterに提供された値は、後でプロバイダーによって実行されるシェルスクリプトファイルにラップされ、保存されます。

CAおよびプロバイダー

CA プロバイダー CAの説明 要件
self-sign certmonger* ローカルCAから自己署名の証明書を発行します。
ipa certmonger* FreeIPA CAを使用して証明書を発行します。 ホストはFreeIPAサーバーに登録されている必要があります。

* デフォルトプロバイダー。

CAは、要求された証明書の発行と署名に使用されるCA証明書を表します。プロバイダーは、CAに証明書リクエストを送信し、署名された証明書を取得するために使用される方法を表します。

ユーザーがCAをself-sign、プロバイダーをcertmongerとして選択し、後でプロバイダーをopensslに変更することを選択した場合、両方のケースで使用されるCA証明書は同じである必要があります。 注意:opensslまだサポートされていないプロバイダーであり、ここでは例としてのみ言及されています。

CertmongerとSELinux

SELinuxが強制されている場合、certmongerサービスは、cert_tコンテキストが存在するディレクトリ内のファイルを書き込むか、編集することができます。

さらに、run_beforeおよびrun_afterパラメーターによって実行されるスクリプトがファイルを書くまたは編集する必要がある場合、それらのスクリプトもロール実行前にcert_tコンテキストの存在が必要です。

SELinuxコンテキストを管理するには、selinux システムロールを使用できます。

certmongerとSELinuxの要件に関する詳細については、certmonger_selinux(8)マニュアルをご覧ください。

自己署名証明書の発行

*.example.comの証明書を発行し、配布用の標準ディレクトリに配置します。

---
- hosts: webserver

  vars:
    certificate_requests:
      - name: mycert
        dns: *.example.com
        ca: self-sign

  roles:
    - linux-system-roles.certificate

各ディストリビューションのディレクトリは、以下の場所にあります:

  • Debian/Ubuntu:

    • 証明書: /etc/ssl/localcerts/certs/
    • 鍵: /etc/ssl/localcerts/private/
  • RHEL/CentOS/Fedora:

    • 証明書: /etc/pki/tls/certs/
    • 鍵: /etc/pki/tls/private/

証明書の配置場所を選択する

証明書と鍵を発行し、指定された場所に配置します。以下の例では、/another/path/mycert.crtに証明書ファイルが作成され、/another/path/mycert.keyに鍵ファイルが作成されます。

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: /another/path/mycert
        dns: *.example.com
        ca: self-sign

  roles:
    - linux-system-roles.certificate

複数のDNS、IP、およびメールを持つ証明書の発行

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns:
          - www.example.com
          - sub1.example.com
          - sub2.example.com
          - sub3.example.com
        ip:
          - 192.0.2.12
          - 198.51.100.65
          - 2001:db8::2:1
        email:
          - [email protected]
          - [email protected]
        ca: self-sign

  roles:
    - linux-system-roles.certificate

共通のサブジェクトオプションの設定

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        common_name: www.example.com
        ca: self-sign
        country: US
        state: NY
        locality: New York
        organization: Red Hat
        organizational_unit: platform
        email: [email protected]
  roles:
    - linux-system-roles.certificate

証明書キーサイズの設定

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        key_size: 4096
  roles:
    - linux-system-roles.certificate

"キー使用"と"拡張キー使用" (EKU) の設定

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        key_usage:
          - digitalSignature
          - nonRepudiation
          - keyEncipherment
        extended_key_usage:
          - id-kp-clientAuth
          - id-kp-serverAuth
  roles:
    - linux-system-roles.certificate

証明書が発行されるのを待たない

証明書の発行にはCAによって数分かかることがあります。そのため、証明書をリクエストするが、実際には待たないという設定も可能です。

この設定はすべての証明書に影響します。certificate_waitnoに設定されている場合、ロールは証明書の発行を待ちません。

---
- hosts: webserver
  vars:
    certificate_wait: false
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
  roles:
    - linux-system-roles.certificate

プリンシパルの設定

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        principal: HTTP/[email protected]

  roles:
    - linux-system-roles.certificate

自動更新を無効にする選択肢

デフォルトでは、このロールによって生成された証明書は自動更新の設定になっています。その動作を無効にするには、auto_renew: noを設定します。

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        auto_renew: no

  roles:
    - linux-system-roles.certificate

FreeIPAを使用して証明書を発行

ホストがFreeIPAサーバーに登録されている場合、そのCAを使用して証明書を発行するオプションもあります。それを行うには、ca: ipaを設定します。

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        principal: HTTP/[email protected]
        ca: ipa

  roles:
    - linux-system-roles.certificate

証明書が発行される前または後にコマンドを実行する

時々、証明書が更新される前にコマンドを実行し、その後に別のコマンドを実行する必要があります。そのためには、run_beforerun_afterを使用します。

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        run_before: systemctl stop webserver.service
        run_after: systemctl start webserver.service

  roles:
    - linux-system-roles.certificate

証明書のオーナーとグループの設定

サービス用の証明書を使用する場合(例:httpd)、証明書を所有するオーナーとグループを設定する必要があります。以下の例では、オーナーとグループの両方がhttpdに設定されています。

---
- hosts: webserver
  vars:
    certificate_requests:
      - name: mycert
        dns: www.example.com
        ca: self-sign
        owner: httpd
        group: httpd

  roles:
    - linux-system-roles.certificate

ユーザー名やグループ名の代わりにUIDやGIDを使用することもできます。

対応状況

現在、CentOS 7以上、RHEL 7以上、Fedoraをサポートしています。Debian 10でテストされています。

rpm-ostree

README-ostree.mdを参照してください。

ライセンス

MIT

著者情報

Sergio Oliveira Campos (@seocam)

プロジェクトについて

Role for managing TLS/SSL certificate issuance and renewal

インストール
ansible-galaxy install linux-system-roles.certificate
ライセンス
mit
ダウンロード
7.6k