第 7 章 身份管理
7.1. 安全 LDAP 通信 复制链接链接已复制到粘贴板!
如果您配置了 Identity 服务(keystone)以针对或检索 LDAP 服务器的身份信息,您可以使用 CA 证书保护 Identity 服务的 LDAP 通信。
本节概述了如何从 Active Directory 获取 CA 证书,如何将 CA 证书文件转换为 Privacy Enhanced Mail (PEM)文件格式,以及为 Identity 服务配置安全 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 的文件,并包含 LDAP 查询均是从 Active Directory 获取的 CA 证书的内容,在标头和页脚内,如下例所示:
-----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 证书由 Web 服务器托管,您可以运行以下命令获取 CA 证书。
Example
- $HOST=redhat.com
- $PORT=443
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'
7.1.3. 为 Identity 服务配置安全 LDAP 通信的方法 复制链接链接已复制到粘贴板!
7.1.3.1. 方法 1 复制链接链接已复制到粘贴板!
如果使用 PEM 文件在 LDAP 级别配置 CA 信任,则使用此方法。手动指定 CA 证书文件的位置。以下流程保护 LDAP 通信不仅针对 Identity 服务,还用于所有使用 OpenLDAP 库的应用程序。
-
将包含 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)数据库在 LDAP 库级别配置了 CA 信任,则使用此方法。使用 certutil 命令将 CA 证书导入并信任到 OpenLDAP 库使用的 NSS 证书数据库中。以下流程保护 LDAP 通信不仅针对 Identity 服务,还用于所有使用 OpenLDAP 库的应用程序。
导入并信任证书,将 [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 证书被列出,信任属性被设置为 CT、。
重启 openstack-keystone 服务:
# systemctl restart openstack-keystone.service
7.1.3.3. 方法 3 复制链接链接已复制到粘贴板!
如果使用 PEM 文件在 Keystone 级别配置了 CA 信任,则使用此方法。保护 Identity 服务和 LDAP 服务器之间的通信的最终方法是为 Identity 服务配置 TLS。
但是,与上述两种方法不同,此方法只保护 Identity 服务的 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