2.2. Ansible을 사용하여 스마트 카드 인증을 위해 IdM 서버 구성

Ansible을 사용하면 IdM(Identity Management) CA에서 신뢰하는 <EXAMPLE.ORG> 도메인의 인증서가 발급한 사용자의 스마트 카드 인증을 활성화할 수 있습니다. 이렇게 하려면 ipasmartcard_server ansible-freeipa 역할 스크립트로 Ansible 플레이북을 실행할 때 사용할 수 있도록 다음 인증서를 가져와야 합니다.

  • <EXAMPLE.ORG> CA 인증서를 직접 발급했거나 하위 CA 중 하나 이상을 통해 발급한 루트 CA의 인증서입니다. 기관에서 인증서를 발급한 웹 페이지에서 인증서 체인을 다운로드할 수 있습니다. 자세한 내용은 Configuring a browser to enable certificate authentication 을 참조하십시오.
  • IdM CA 인증서입니다. IdM CA 서버의 /etc/ipa/ca.crt 파일에서 CA 인증서를 가져올 수 있습니다.
  • <EXAMPLE.ORG> CA와 IdM CA 사이에 있는 모든 CA의 인증서입니다.

사전 요구 사항

  • IdM 서버에 대한 root 액세스 권한이 있어야 합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 루트 CA 인증서, IdM CA 인증서 및 모든 중간 CA 인증서가 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 정규화된 도메인 이름(FQDN)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장하는 것으로 가정합니다.

절차

  1. CA 인증서가 DER 와 같은 다른 형식의 파일에 저장된 경우 PEM 형식으로 변환합니다.

    # openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM

    IdM 인증 기관 인증서는 PEM 형식이며 /etc/ipa/ca.crt 파일에 있습니다.

  2. 필요한 경우 openssl x509 유틸리티를 사용하여 PEM 형식의 파일 내용을 보고 IssuerSubject 값이 올바른지 확인합니다.

    # openssl x509 -noout -text -in root-ca.pem | more
  3. ~/MyPlaybook/ 디렉토리로 이동합니다.

    $ cd ~/MyPlaybooks/
  4. CA 인증서 전용 하위 디렉터리를 생성합니다.

    $ mkdir SmartCard/
  5. 편의를 위해 필요한 모든 인증서를 ~/MyPlaybook/SmartCard/ 디렉터리에 복사합니다.

    # cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/
    # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt
  6. Ansible 인벤토리 파일에서 다음을 지정합니다.

    • 스마트 카드 인증을 위해 구성할 IdM 서버입니다.
    • IdM 관리자 암호입니다.
    • 다음 순서로 CA 인증서의 경로입니다.

      • 루트 CA 인증서 파일
      • 중간 CA 인증서 파일
      • IdM CA 인증서 파일

    파일은 다음과 같습니다.

    [ipaserver]
    ipaserver.idm.example.com
    
    [ipareplicas]
    ipareplica1.idm.example.com
    ipareplica2.idm.example.com
    
    [ipacluster:children]
    ipaserver
    ipareplicas
    
    [ipacluster:vars]
    ipaadmin_password=SomeADMINpassword
    ipasmartcard_server_ca_certs=/home/<user_name>/MyPlaybooks/SmartCard/root-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/intermediate-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/ipa-ca.crt
  7. 다음 콘텐츠를 사용하여 install-smartcard-server.yml 플레이북을 생성합니다.

    ---
    - name: Playbook to set up smart card authentication for an IdM server
      hosts: ipaserver
      become: true
    
      roles:
      - role: ipasmartcard_server
        state: present
  8. 파일을 저장합니다.
  9. Ansible 플레이북을 실행합니다. Playbook 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일, 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.yml

    ipasmartcard_server Ansible 역할은 다음 작업을 수행합니다.

    • IdM Apache HTTP 서버를 구성합니다.
    • KDC (Key Distribution Center)에서 Kerberos (PKINIT)에서 초기 인증의 공개 키 암호화를 활성화합니다.
    • 스마트 카드 권한 부여 요청을 수락하도록 IdM 웹 UI를 구성합니다.
  10. 선택적으로 사용자 인증서를 발급한 인증 기관이 OCSP 검사를 IdM 웹 UI에 대한 인증을 비활성화해야 할 수 있습니다.

    1. root 로 IdM 서버에 연결합니다.

      ssh root@ipaserver.idm.example.com
    2. /etc/httpd/conf.d/ssl.conf 파일에서 SSLOCSPEnable 매개변수를 off 로 설정합니다.

      SSLOCSPEnable off
    3. 변경 사항을 즉시 적용하려면 Apache 데몬(httpd)을 다시 시작합니다.

      # systemctl restart httpd
    주의

    IdM CA에서 발급한 사용자 인증서만 사용하는 경우 OCSP 검사를 비활성화하지 마십시오. OCSP 응답자는 IdM의 일부입니다.

    OCSP 검사를 계속 활성화하는 방법에 대한 지침은 Apache mod_ssl 구성 옵션에서 SSLOCSPDefaultResponder 지시문을 참조하십시오.

인벤토리 파일에 나열된 서버가 스마트 카드 인증을 위해 구성되어 있습니다.

참고

전체 토폴로지에서 스마트 카드 인증을 활성화하려면 Ansible 플레이북의 hosts 변수를 ipacluster 로 설정합니다.

---
- name: Playbook to setup smartcard for IPA server and replicas
  hosts: ipacluster
[...]

추가 리소스

  • /usr/share/doc/ansible-freeipa/playbooks/ 디렉터리에서 ipasmartcard_server 역할을 사용하는 샘플 플레이북