OpenShift v3 のLDAP認証
OpenShiftの設定はマニュアルに書いてありありますが、そもそもLDAPサーバの証明書の準備などなど少し手間取ったので、メモです。
LDAPサーバの準備
インストール
これらのページを参照
- http://linux-hacking-guide.blogspot.jp/2015/04/ldap-authentication-server-in-rhel7.html
- http://www.certdepot.net/rhel7-configure-ldap-directory-service-user-connection/
確認
参照サイト(2)の方法で、/etc/passwd からユーザを移行している場合は、以下のコマンドで確認できます。
ldapsearch -x cn=ldapuser01 -b dc=example,dc=com
curl "ldap://client.cloud:389/dc=example,dc=com?cn?sub?uid=ldap*" -u "cn=Manager,dc=example,dc=com" Enter host password for user 'cn=Manager,dc=example,dc=com’:redhat DN: uid=ldapuser01,ou=People,dc=example,dc=com cn: ldapuser01 password=user01ldap DN: uid=ldapuser02,ou=People,dc=example,dc=com cn: ldapuser02 password=user02ldap
TLSの利用設定とオレオレ証明書発行
証明書の発行
参照サイト (1) の以下の手順で証明書を発行します。
10) Create Server Certificate. Follow the following steps:
10.1) Create a local Certificate Authority (CA).
[root@oserver1 ~]# /etc/pki/tls/misc/CA -newca
ここで設定するホスト名は、LDAPサーバのホスト名にしました。
10.2) Create public-private key pair
[root@oserver1 ~]# openssl genrsa -out ldapserver.key
10.3) Create a certificate signing request (CSR)
[root@oserver1 ~]# openssl req -new -key ldapserver.key -out ldapserver.csr
10.4) Sign the certificate with the local CA.
[root@oserver1 ~]# openssl ca -in ldapserver.csr -out ldapserver.crt
10.5) Copy the files 'ldapserver.key' and 'ldapserver.crt' to the dir. '/etc/openldap/certs/'
10.6) We have to copy the CA cert file '/etc/pki/CA/cacert.pem' to the dir '/etc/openldap/cacerts/' on every client machine.
10.7)Create a file 'cert.ldif' with the following entries.
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/ldapserver.crt dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.key
10.8) Make entry
[root@oserver1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f cert.ldif
追加設定
※ここは私の勘違いがありそうな予感。。。
TLSCACerfiticationを有効にするため、/etc/openldap/slapd.d/cn=config.ldif
にolcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem
の記述を追加します。
すでに、olcTLSCACertificateFileの定義がある場合は、次のldifを使って更新します。
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem
ldaps の有効化
/etc/sysconfig/slapd
を編集してSLAPD_URLS
を変更します。
#SLAPD_URLS="ldapi:/// ldap:///" SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
トラブルシューティング
データベースの更新エラー
色々と悪銭苦闘していると、証明書を発行し直したり。で、そんなこんなでopenssl ca
実行時にエラーが発生。
failed to update database TXT_DB error number 2
古い証明書を無効にする必要があります。
openssl ca -revoke /etc/pki/CA/newcerts/00.pem
revoke
もできない場合は、`/etc/pki/CA/index.txt を編集します。
cp -p /etc/pki/CA/index.txt{,.old} : > /etc/pki/CA/index.txt
動作確認
# openssl s_client -connect client.cloud:636 -CAfile my-ldap-ca-bundle.crt CONNECTED(00000003) depth=1 C = XX, ST = Default State, O = Default Company Ltd, OU = Default Organization, CN = client.cloud verify return:1 depth=0 C = XX, ST = Default State, O = Default Company Ltd, OU = Default Organization, CN = client.cloud verify return:1 --- Certificate chain 0 s:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud i:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud 1 s:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud i:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud --- Server certificate -----BEGIN CERTIFICATE----- MIIDbDCCAlSgAwIBAgIJANs2X7OV8HUkMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV BAYTAlhYMRYwFAYDVQQIDA1EZWZhdWx0IFN0YXRlMRwwGgYDVQQKDBNEZWZhdWx0 IENvbXBhbnkgTHRkMR0wGwYDVQQLDBREZWZhdWx0IE9yZ2FuaXphdGlvbjEVMBMG A1UEAwwMY2xpZW50LmNsb3VkMB4XDTE1MTAwNzIxNDQyNFoXDTE2MTAwNjIxNDQy NFoweTELMAkGA1UEBhMCWFgxFjAUBgNVBAgMDURlZmF1bHQgU3RhdGUxHDAaBgNV BAoME0RlZmF1bHQgQ29tcGFueSBMdGQxHTAbBgNVBAsMFERlZmF1bHQgT3JnYW5p emF0aW9uMRUwEwYDVQQDDAxjbGllbnQuY2xvdWQwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMOUaNe/BY4cj6Q5eFZvfsKMnLCKXP6Ui6MVA4D5FuxoU7lSfUm5 VIvcxsxJNWGExPC9ZpDK0Yulpr3+FXbRhcwcZb6N5/F2UldamC4mscZT1AsfwRZJ zMN+14HGV0lfAGkaA/ctbgOw41rd0oyy+VGODRAUMFlt6kF7/VFixTITAgMBAAGj ezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVk IENlcnRpZmljYXRlMB0GA1UdDgQWBBSRtt3qakgF9XS09BNnhT8GfT7C6zAfBgNV HSMEGDAWgBShCPFk9kdbkAQoYRxf46abhM6DzTANBgkqhkiG9w0BAQsFAAOCAQEA IVGB3hSQWXzAl2jHP8pHQ/s1qeRQZAKHuCp687CycikhSVgVd/VFA+VLeoTJrL7m ESdfz0L3j+jJtlWTjN9Evs4QJBfqHkIyFlxz+ud0k+2tXdggqV+Cqo1i0hi+u9F1 KZL8BhPJwnN+Z8vEhA0RaWctqbTr2jMJ0ySEHGghmaPEggkZjbJ7TCub4KCwlKVF 12XIAEr4xLx6eOlwFQRmC8TpgGkKLj2HZ/k+7ywlApbv1zJErq3C1fyB9TQNNPEX 0Wdow+uuIQIgCog65YepsVHE4cMikX0uaXZW3tyE6FcD0Y3uaU9+X5pyJ+XGosC4 i46cMdt0xQutdACKdrRteA== -----END CERTIFICATE----- subject=/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud issuer=/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud --- No client certificate CA names sent --- SSL handshake has read 2003 bytes and written 439 bytes --- New, TLSv1/SSLv3, Cipher is AES128-GCM-SHA256 Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : AES128-GCM-SHA256 Session-ID: 268668D6A0B3813C46718D3502D5F028A068BE44F5A9CE23407611499A62D77D Session-ID-ctx: Master-Key: 808949603CFADCDC98FDB435495C3DE5D8A6106FD2214D891142148F5FE5CC546A552F19EF90C45BCBE02E0AAB00AE28 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1444300644 Timeout : 300 (sec) Verify return code: 0 (ok) ---
OpenShiftの認証設定
証明証の配置
LDAPサーバから証明書(/etc/openldap/cacerts/cacert.pem
)を取得して、/etc/openshift/master/my-ldap-ca-bundle.crt
に保存します。
oauthConfig: assetPublicURL: https://master.cloud:8443/console/ grantConfig: method: auto identityProviders: - name: my_ldap_provider challenge: True login: True provider: apiVersion: v1 kind: LDAPPasswordIdentityProvider attributes: id: - dn email: - mail name: - cn preferredUsername: - uid bindDN: "cn=Manager,dc=example,dc=com" bindPassword: "redhat" ca: "my-ldap-ca-bundle.crt" insecure: false url: "ldaps://client.cloud:636/dc=example,dc=com?uid"
なお、CAの認証をしない場合、ca
、insecure
、url
の設定は以下の通りです。
ca: "" insecure: true url: "ldap://client.cloud:389/dc=example,dc=com?uid"
openshift-master を再起動して、LDAP認証の完了です