7장. IdM (Identity Management)
7.1. 보안 LDAP 통신
LDAP 서버에서 ID 정보를 인증하거나 검색하도록 ID 서비스(keystone)를 구성한 경우 CA 인증서를 사용하여 ID 서비스의 LDAP 통신을 보호할 수 있습니다.
이 섹션에서는 Active Directory에서 CA 인증서를 가져오는 방법, CA 인증서 파일을 Privacy Enhanced mail(PEM) 파일 형식으로 변환하는 방법, ID 서비스에 대한 보안 LDAP 통신을 구성하는 세 가지 방법을 간략하게 설명합니다. 각 방법의 절차는 CA 신뢰의 위치와 방법에 따라 수행해야 합니다.
7.1.1. Active Directory에서 CA 인증서 가져오기
다음 코드는 Active Directory를 쿼리하여 CA 인증서를 가져오는 방법의 예를 보여줍니다. CA_NAME은 인증서의 이름이며(mmc.exe에서 볼 수 있음) 설정에 따라 나머지 매개변수를 변경할 수 있습니다.
CA_NAME="WIN2012DOM-WIN2012-CA" AD_SUFFIX="dc=win2012dom,dc=com" LDAPURL="ldap://win2012.win2012dom.com" ADMIN_DN="cn=Administrator,cn=Users,$AD_SUFFIX" ADMINPASSWORD="MyPassword" CA_CERT_DN="cn=latexmath:[$CA_NAME,cn=certification authorities,cn=public key services,cn=services,cn=configuration,$]AD_SUFFIX" TMP_CACERT=/tmp/cacert.`date +'%Y%m%d%H%M%S'`.$$.pem ldapsearch -xLLL -H latexmath:[$LDAPURL -D `echo \"$]ADMIN_DN"`-W -s base -b`echo "$CA_CERT_DN"` objectclass=* cACertificate
7.1.2. CA 인증서를 PEM 파일 형식으로 변환
아래 예제와 같이 /path/cacert.pem이라는 파일을 만들고 Active Directory에서 CA 인증서를 가져온 LDAP 쿼리의 내용을 헤더 및 footer 내에 포함합니다.
-----BEGIN CERTIFICATE----- MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END CERTIFICATE-----
문제 해결을 위해 다음 쿼리를 실행하여 LDAP가 작동하는지 확인하고 PEM 인증서 파일이 올바르게 생성되었는지 확인할 수 있습니다.
LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime
쿼리에서 다음과 유사한 결과를 반환해야 합니다.
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'
7.1.3. ID 서비스에 대한 보안 LDAP 통신 구성 방법
7.1.3.1. 방법 1
PEM 파일을 사용하여 CA 신뢰가 LDAP 수준에서 구성된 경우 이 방법을 사용합니다. CA 인증서 파일의 위치를 수동으로 지정합니다. 다음 절차에서는 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션뿐만 아니라 ID 서비스뿐만 아니라 LDAP 통신을 보호합니다.
-
PEM 형식의 CA 인증서 체인이 포함된 파일을
/etc/openldap/certs
디렉터리에 복사합니다. /etc/openldap/ldap.conf
를 편집하고 다음 지시문을 추가하여 [CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 바꿉니다.TLS_CACERT /etc/openldap/certs/[CA_FILE]
openstack-keystone 서비스를 다시 시작합니다.
# systemctl restart openstack-keystone.service
7.1.3.2. 방법 2
NSS(Network Security Services) 데이터베이스를 사용하여 LDAP 라이브러리 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. certutil
명령을 사용하여 OpenLDAP 라이브러리에서 사용하는 NSS 인증서 데이터베이스로 CA 인증서를 가져오고 신뢰합니다. 다음 절차에서는 OpenLDAP 라이브러리를 사용하는 모든 애플리케이션뿐만 아니라 ID 서비스뿐만 아니라 LDAP 통신을 보호합니다.
[CA_FILE]을 CA 인증서 파일의 위치 및 이름으로 교체하여 인증서를 가져오고 신뢰합니다.
# certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]
CA 인증서를 올바르게 가져왔는지 확인합니다.
# certutil -d /etc/openldap/certs -L
CA 인증서가 나열되고 신뢰 속성은 gRPC( ,)로 설정됩니다.
openstack-keystone 서비스를 다시 시작합니다.
# systemctl restart openstack-keystone.service
7.1.3.3. 방법 3
PEM 파일을 사용하여 Keystone 수준에서 CA 신뢰가 구성된 경우 이 방법을 사용합니다. ID 서비스와 LDAP 서버 간의 통신을 보호하는 마지막 방법은 ID 서비스에 대해 TLS를 구성하는 것입니다.
그러나 위의 두 방법과 달리 이 방법은 ID 서비스의 LDAP 통신만 보호하고 OpenLDAP 라이브러리를 사용하는 다른 애플리케이션의 LDAP 통신을 보호하지 않습니다.
다음 절차에서는 openstack-config
명령을 사용하여 /etc/keystone/keystone.conf
파일의 값을 편집합니다.
TLS를 활성화합니다.
# openstack-config --set /etc/keystone/keystone.conf ldap use_tls True
인증서 위치를 지정하고 [CA_FILE]을 CA 인증서 이름으로 교체합니다.
# openstack-config --set /etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]
LDAP 서버에서 들어오는 TLS 세션에서 수행되는 클라이언트 인증서 검사를 지정하고 [CERT_BEHAVIOR]을 아래에 나열된 동작 중 하나로 교체합니다.
- 수요
- 인증서는 항상 LDAP 서버에서 요청합니다. 인증서를 제공하지 않거나 제공된 인증서를 기존 인증 기관 파일에 대해 확인할 수 없는 경우 세션이 종료됩니다.
- allow
- 인증서는 항상 LDAP 서버에서 요청합니다. 이 세션은 인증서를 제공하지 않더라도 정상적으로 진행됩니다. 인증서가 제공되지만 기존 인증 기관 파일에 대해 확인할 수 없는 경우 인증서가 무시되고 세션은 정상적으로 진행됩니다.
- never
- 인증서가 요청되지 않습니다.
# openstack-config --set /etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]
openstack-keystone 서비스를 다시 시작합니다.
# systemctl restart openstack-keystone.service