Identity Service の LDAP 通信をセキュリティー保護する方法
概要
Identity Service (Keystone) が LDAP サーバーに対して認証を行うように設定している場合、または LDAP サーバーから ID 情報を取得するように設定している場合には、CA 証明書を使用することによって Identity Service の LDAP 通信をセキュリティー保護することができます。本記事には、Active Directory から CA 証明書を取得する方法、CA 証明書ファイルを Privacy Enhanced Mail (PEM) ファイル形式に変換する方法、および Identity Service のセキュアな LDAP 通信を設定する 3 つのメソッドを記載します。各メソッドの手順は、CA 信頼が設定されている場所とその方法に応じて実行する必要があります。
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=$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 $LDAPURL -D `echo \"$ADMIN_DN\"` -W -s base -b `echo \"$CA_CERT_DN\"` objectclass=* cACertificate
CA 証明書を PEM ファイル形式に変換する方法
/path/cacert.pem という名前のファイルを作成し、以下の例に示したように、Active Directory から CA 証明書を取得するための LDAP クエリーの内容をヘッダーとフッターの間に追加します。
-----BEGIN CERTIFICATE-----
MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB...
-----END CERTIFICATE-----
トラブルシューティングを行う場合には、以下のクエリーを実行して LDAP が稼働しているかをチェックし、PEN 証明書ファイルが正しく作成されたかどうかを確認することができます。
LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime
このクエリーによって、以下のような結果が返されるはずです。
dn:
currentTime: 20141022050611.0Z
CA 証明書が Web サーバーでホストされていた場合には、以下のコマンドを実行して CA 証明書を取得することができます。
例:
$HOST: redhat.com
$PORT: 443
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
Identity Service のセキュアな LDAP 通信を設定する方法
メソッド 1.
CA 信頼が PEM ファイルを使用して LDAP レベルで設定されている場合は、この方法を使用してください。CA 証明書ファイルの場所は手動で指定します。以下の手順では、Identity Service のみでなく、OpenLDAP ライブラリーを使用する全アプリケーションの LDAP 通信がセキュリティー保護されます。
-
CA 証明書チェーンが含まれている ファイルを PEM 形式で /etc/openldap/certs ディレクトリーにコピーします。
-
/etc/openldap/ldap.conf を編集して以下のディレクティブを追加します。[ca_file] はCA 証明書ファイルの場所と名前に置き換えます。
TLS_CACERT /etc/openldap/certs/[ca_file]
-
openstack-keystone サービスを再起動します。
A. Red Hat Enterprise Linux 6 ベースのシステムの場合
# service openstack-keystone restart
B. Red Hat Enterprise Linux 7 ベースのシステムの場合
# systemctl restart openstack-keystone.service
メソッド 2.
CA 信頼が Network Security Services (NSS) データベースを介して LDAP ライブラリーレベルで設定されている場合は、この方法を使用してください。certutil コマンドを使用して、OpenLDAP ライブラリーが使用する NSS 証明書データベースに CA 証明書をインポートして信頼します。以下の手順では、Identity Service のみでなく、OpenLDAP ライブラリーを使用する全アプリケーションの 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 証明書がリストされ、信頼の属性が CT,, に設定されます。
-
openstack-keystone サービスを再起動します。
A. Red Hat Enterprise Linux 6 ベースのシステムの場合
# service openstack-keystone restart
B. Red Hat Enterprise Linux 7 ベースのシステムの場合
# systemctl restart openstack-keystone.service
メソッド 3.
CA 信頼が PEM ファイルを使用して Keystone レベルで設定されている場合は、この方法を使用してください。Identity Service と LDAP サーバー間の通信をセキュリティー保護する最後のメソッドは、Identity Service に TLS を設定する方法です。ただし、上記の 2 つのメソッドとは異なり、このメソッドでは、Identity Service の 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] は以下にあげる動作のいずれか 1 つに置き換えてください。
# openstack-config --set /etc/keystone/keystone.conf ldap tls_req_cert [cert_behavior]
demand: LDAP サーバーにより証明書が常に要求されます。証明書が提供されなかった場合、または提供された証明書が既存の認証局ファイルに対して検証できなかった場合には、セッションは終了します。
allow: LDAP サーバーにより証明書が常に要求されます。証明書が提供されなくてもセッションは通常どおりに続行されます。証明書が提供されたが、既存の認証局ファイルに対して検証できなかった場合には、その証明書は無視され、セッションは通常どおりに続行します。
never: 証明書は一切要求されません。
-
openstack-keystone サービスを再起動します。
A. Red Hat Enterprise Linux 6 ベースのシステムの場合
# service openstack-keystone restart
B. Red Hat Enterprise Linux 7 ベースのシステムの場合
# systemctl restart openstack-keystone.service
Comments