21장. RHEL 시스템 역할을 사용하여 CA에서 인증서 요청 및 자체 서명된 인증서 생성
웹 서버와 같은 많은 서비스는 TLS를 사용하여 클라이언트와의 연결을 암호화합니다. 이러한 서비스에는 개인 키와 인증서, 인증서에 서명하는 신뢰할 수 있는 CA(인증 기관)가 필요합니다.
인증서
RHEL 시스템 역할을 사용하면 관리형 노드에서 개인 키 생성을 자동화할 수 있습니다. 또한 이 역할은 CSR(인증서 서명 요청)을 CA로 전송하도록 certmonger
서비스를 구성하고 서비스가 만료되기 전에 인증서를 자동으로 갱신합니다.
테스트를 위해 CA에서 서명된 인증서
를 요청하는 대신 인증서 역할을 사용하여 자체 서명된 인증서를 생성할 수 있습니다.
21.1. 인증서 RHEL 시스템 역할을 사용하여 IdM CA에서 새 인증서
요청
Red Hat Enterprise Linux 호스트가 RHEL IdM(Identity Management) 환경의 멤버인 경우 IdM 인증 기관(CA)에서 TLS 인증서를 요청하고 이 호스트에서 실행되는 서비스에서 사용할 수 있습니다. 인증서
RHEL 시스템 역할을 사용하면 개인 키 생성 프로세스를 자동화하고 certmonger
서비스가 CA에서 인증서를 요청하도록 할 수 있습니다. 기본적으로 certmonger
는 만료되기 전에 인증서를 갱신합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. - 관리형 노드는 IdM 도메인의 멤버이며 도메인은 IdM 통합 CA를 사용합니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/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
예제 플레이북에 지정된 설정은 다음과 같습니다.
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
RHEL 시스템 역할을 사용하여 SELinux 컨텍스트를 관리할 수 있습니다.
-
변수를
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
가 실행해야 하는 명령을 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ 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/
directory