8장. ID 관리
8.1. LDAP 통신 보안 링크 복사링크가 클립보드에 복사되었습니다!
LDAP 서버에서 인증하거나 LDAP 서버에서 ID 정보를 검색하도록 ID 서비스(keystone)를 구성한 경우 CA 인증서를 사용하여 ID 서비스의 LDAP 통신을 보호할 수 있습니다.
Active Directory에서 CA 인증서를 가져오고 CA 인증서 파일을 PEM(개인 정보 보호 강화 메일) 파일 형식으로 변환하고, ID 서비스에 대해 보안 LDAP 통신을 구성해야 합니다. CA 신뢰가 구성되는 위치 및 방법에 따라 세 가지 방법 중 하나로 이 구성을 수행할 수 있습니다.
8.1.1. Active Directory에서 CA 인증서 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제 코드를 사용하여 Active Directory를 쿼리하여 CA 인증서를 가져옵니다. CA_NAME은 인증서의 이름이고 구성에 따라 나머지 매개 변수를 변경할 수 있습니다.
8.1.2. CA 인증서를 PEM 파일 형식으로 변환 링크 복사링크가 클립보드에 복사되었습니다!
/path/cacert.pem이라는 파일을 생성하고, 헤더와 바닥글 내에 Active Directory에서 CA 인증서를 가져온 LDAP 쿼리 PID-tty의 내용을 포함합니다.
-----BEGIN CERTIFICATE----- MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END
CERTIFICATE-----
문제 해결을 위해 다음 쿼리를 실행하여 LDAP가 작동하는지 확인하고 PEM 인증서 파일이 올바르게 생성되었는지 확인할 수 있습니다.
LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime
LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime
쿼리에서 다음과 유사한 결과를 반환해야 합니다.
dn: currentTime: 20141022050611.0Z
dn: currentTime:
20141022050611.0Z
다음 명령을 실행하여 웹 서버에서 호스팅하는 경우 CA 인증서를 가져올 수 있습니다.
예제
- $HOST=redhat.com
- $PORT=443
echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'
8.1.3. ID 서비스에 대한 보안 LDAP 통신을 구성하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
8.1.3.1. 방법 1 링크 복사링크가 클립보드에 복사되었습니다!
PEM 파일을 사용하여 LDAP 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. CA 인증서 파일의 위치를 수동으로 지정합니다. 다음 절차에서는 ID 서비스뿐만 아니라 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션에 대해 LDAP 통신을 보호합니다.
-
PEM 형식의 CA 인증서 체인이 포함된 파일을
/etc/openldap/certs디렉터리에 복사합니다. /etc/openldap/ldap.conf를 편집하고 [CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 교체하여 다음 지시문을 추가합니다.TLS_CACERT /etc/openldap/certs/[CA_FILE]
TLS_CACERT /etc/openldap/certs/[CA_FILE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow Horizon 컨테이너를 다시 시작합니다.
systemctl restart tripleo_horizon
# systemctl restart tripleo_horizonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.3.2. 방법 2 링크 복사링크가 클립보드에 복사되었습니다!
NSS(Network Security Services) 데이터베이스를 사용하여 LDAP 라이브러리 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. certutil 명령을 사용하여 OpenLDAP 라이브러리에서 사용하는 NSS 인증서 데이터베이스로 CA 인증서를 가져오고 신뢰합니다. 다음 절차에서는 ID 서비스뿐만 아니라 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션에 대해 LDAP 통신을 보호합니다.
인증서를 가져오고 신뢰하여 [CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 바꿉니다.
certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE] certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]
# certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE] # certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA 인증서를 올바르게 가져왔는지 확인합니다.
certutil -d /etc/openldap/certs -L
# certutil -d /etc/openldap/certs -LCopy to Clipboard Copied! Toggle word wrap Toggle overflow CA 인증서가 나열되고 신뢰 속성이 CT,, 로 설정됩니다.
Horizon 컨테이너를 다시 시작합니다.
systemctl restart tripleo_horizon
# systemctl restart tripleo_horizonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.3.3. 방법 3 링크 복사링크가 클립보드에 복사되었습니다!
PEM 파일을 사용하여 Keystone 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. ID 서비스와 LDAP 서버 간의 통신을 보호하는 최종 방법은 ID 서비스에 대해 TLS를 구성하는 것입니다.
그러나 위의 두 가지 방법과 달리 이 방법은 ID 서비스에 대해서만 LDAP 통신을 보호하며 OpenLDAP 라이브러리를 사용하는 다른 애플리케이션에 대해 LDAP 통신을 보호하지 않습니다.
다음 절차에서는 openstack-config 명령을 사용하여 /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf 파일의 값을 편집합니다.
TLS를 활성화합니다.
openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap use_tls True
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap use_tls TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서의 위치를 지정하고 [CA_FILE]을 CA 인증서 이름으로 바꿉니다.
openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow [CERT_BEHAVIOR]를 아래에 나열된 동작 중 하나로 교체하여 LDAP 서버에서 수신 TLS 세션에서 수행되는 클라이언트 인증서 검사를 지정합니다.
- 수요
- 항상 LDAP 서버에서 인증서를 요청합니다. 인증서가 제공되지 않거나 제공된 인증서를 기존 인증 기관 파일에 대해 확인할 수 없는 경우 세션이 종료됩니다.
- allow
- 항상 LDAP 서버에서 인증서를 요청합니다. 인증서가 제공되지 않은 경우에도 세션이 정상적으로 진행됩니다. 인증서가 제공되었지만 기존 인증 기관 파일에 대해 확인할 수 없는 경우 인증서는 무시되고 세션이 정상적으로 진행됩니다.
- never
- 인증서는 요청되지 않습니다.
openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]Copy to Clipboard Copied! Toggle word wrap Toggle overflow keystone 및 horizon 컨테이너를 다시 시작합니다.
systemctl restart tripleo_keystone systemctl restart tripleo_horizon
# systemctl restart tripleo_keystone # systemctl restart tripleo_horizonCopy to Clipboard Copied! Toggle word wrap Toggle overflow