第7章 RHEL システムロールを使用した CA からの証明書の要求および自己署名証明書の作成
Web サーバーなどの多くのサービスは、TLS を使用してクライアントとの接続を暗号化します。これらのサービスには、秘密鍵と証明書、および証明書に署名する信頼できる認証局 (CA) が必要です。
certificate
RHEL システムロールを使用すると、管理対象ノードでの秘密鍵の生成を自動化できます。さらに、このロールは、証明書署名要求 (CSR) を CA に送信するように certmonger
サービスを設定し、証明書が期限切れになる前にサービスが自動的に証明書を更新します。
テスト目的の場合は、certificate
ロールを使用して、CA から署名済み証明書を要求する代わりに、自己署名証明書を作成できます。
7.1. certificate
RHEL システムロールを使用した IdM CA からの新しい証明書の要求
Red Hat Enterprise Linux ホストが RHEL Identity Management (IdM) 環境のメンバーである場合、IdM 認証局 (CA) から TLS 証明書を要求し、このホストで実行されるサービスでその証明書を使用できます。certificate
RHEL システムロールを使用すると、秘密鍵を作成するプロセスと、certmonger
サービスが CA から証明書を要求するプロセスを自動化できます。また、certmonger
は、デフォルトで証明書の有効期限が切れる前に更新を行います。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - 管理対象ノードが IdM ドメインのメンバーであり、そのドメインで IdM 統合 CA を使用している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Create certificates hosts: managed-node-01.example.com tasks: - name: Create a self-signed certificate ansible.builtin.include_role: name: rhel-system-roles.certificate vars: certificate_requests: - name: web-server ca: ipa dns: www.example.com principal: HTTP/www.example.com@EXAMPLE.COM run_before: systemctl stop httpd.service run_after: systemctl start httpd.service
サンプル Playbook で指定されている設定は次のとおりです。
name: <path_or_file_name>
生成される秘密鍵と証明書ファイルの名前またはパスを定義します。
-
変数を
web-server
に設定すると、ロールによって秘密鍵が/etc/pki/tls/private/web-server.key
に保存され、証明書が/etc/pki/tls/certs/web-server.crt
ファイルに保存されます。 変数を
/tmp/web-server
などのパスに設定すると、ロールによって秘密鍵が/tmp/web-server.key
に保存され、証明書が/tmp/web-server.crt
ファイルに保存されます。使用するディレクトリーに
cert_t
SELinux コンテキストが設定されている必要があることに注意してください。SELinux コンテキストは、selinux
RHEL システムロールを使用して管理できます。
-
変数を
ca: ipa
- ロールが IdM CA から証明書を要求することを指定します。
dns: <hostname_or_list_of_hostnames>
-
発行された証明書のサブジェクト代替名 (SAN) フィールドに含まれるホスト名を設定します。ワイルドカード (
*
) を使用することも、YAML リスト形式で複数の名前を指定することもできます。 principal: <kerberos_principal>
- オプション: 証明書に含める Kerberos プリンシパルを設定します。
run_before: <command>
-
オプション: CA から証明書を要求する前に
certmonger
が実行するコマンドを定義します。 run_after: <command>
-
オプション: CA から発行された証明書を受け取った後に
certmonger
が実行するコマンドを定義します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
certmonger
サービスが管理する証明書をリスト表示します。# ansible managed-node-01.example.com -m command -a 'getcert list' ... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key' certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt' CA: IPA issuer: CN=Certificate Authority,O=EXAMPLE.COM subject: CN=www.example.com issued: 2024-09-18 16:22:11 CEST expires: 2025-09-18 16:22:10 CEST dns: www.example.com key usage: digitalSignature,keyEncipherment eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: systemctl stop httpd.service post-save command: systemctl start httpd.service track: yes auto-renew: yes
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md
ファイル -
/usr/share/doc/rhel-system-roles/certificate/
ディレクトリー