CentOSホストシステムでLDAPによる認証を許可しようとしています。しかし、pam_ldapから常にCannot contact LDAP serverエラーが表示されます。
LDAPサーバーはping可能で、認証はldap://では完全に機能しますが、ldaps://では機能しません。また、debian OSではldaps://と完全に連携しますが、CentOSでは連携しません。
$ ldapsearch ...でもCa n't contactエラーが発生しましたが、設定TLS_REQCERT allow/etc/openldap/ldap.confにあります。ただし、これを/etc/pam_ldap.confに設定しても効果はありません。
私がしたステップ:
その他の情報:
/ var/log/secureのIPも混乱しています。そこでは10.1.1.1からtestuserのパスワードが失敗しましたとありますが、LDAPサーバーの構成済みIPは10.1.1.42で、ホストIPは10.1.1.27です。とにかく、私がuri ldap://10.1.1.42を使用し、ssl on行にコメントを付けると、認証は魅力のように機能します。
何か案は?
。
Pam経由で認証を試みます/ var/log/secure
Sep 15 09:50:37 client-server unix_chkpwd[16146]: password check failed for user (testuser)
Sep 15 09:50:37 client-server sshd[16144]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.1.1 user=testuser
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: reconnecting to LDAP server...
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:40 client-server sshd[16144]: Failed password for testuser from 10.1.1.1 port 11339 ssh2
Sep 15 09:50:40 client-server sshd[16145]: Received disconnect from 10.1.1.1: 13: Unable to authenticate
$ ldapsearch -v -H ldaps://10.1.1.42/ -D cn = admin、dc = sub、dc = example、dc = org -W -x -b dc = sub、dc = example、 dc = org -d1 ldaps //が機能しているかどうかを確認します。 (はい、うまくいきます)
ldap_url_parse_ext(ldaps://10.1.1.42/)
ldap_initialize( ldaps://10.1.1.42:636/??base )
ldap_create
ldap_url_parse_ext(ldaps://10.1.1.42:636/??base)
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_Host: TCP 10.1.1.42:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_Host: Trying 10.1.1.42:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0
ldap_open_defconn: successful
ldap_send_server_request
...
/ etc/pam_ldap.confの内容
ldap_version 3
pam_password crypt
uri ldaps://10.1.1.42:636
base dc=sub,dc=example,dc=org
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
tls_checkpeer no
/ etc/openldap/ldap.confの内容
TLS_REQCERT allow
TLS_CACERTFILE /srv/ldap-cacert.pem
URI ldaps://10.1.1.42:636/
BASE dc=sub,dc=example,dc=org
/ etc/nslcd.confの内容
uid nslcd
gid ldap
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org
/ etc/ldap.confおよび/ etc/ldap/ldap.confの内容:
tls_checkpeer no
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org
Migtorは私を正しい方向に押しました。ありがとうございました!
TLS_REQCERTを削除し、ldapsearchエラーをチェックすると、TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
。
私のCA証明書は正しいものですが、openldapは認証局をチェックするためにデフォルトでMozilla Network Security Services(MozNSS)を使用します。そのため、このデータベースに自己署名CAを追加する必要があります。
編集:Migtorが彼のコメントで指摘したように、これはCentOS、RHELおよび派生物にのみ適用されます。
。
まず、CA証明書をクライアントにコピーします(私のパス:/etc/openldap/cacerts/ldap-cacert.pem)
pam_ldapをインストールした後、MozNSSデータベースは/ etc/openldap/certsにあります:
# certutil -d /etc/openldap/certs -A -n "ldap CA" -t TCu,Cu,Tuw -a -i /etc/openldap/cacerts/ldap-cacert.pem
# certutil -L -d /etc/openldap/certs
My/ etc/pam_ldap.confの新しいコンテンツ
ldap_version 3
pam_password crypt
uri ldaps://[FQDN-of-my-ldap-server]:636
base dc=sub,dc=example,dc=org
ssl on
tls_cacertdir /etc/openldap/certs
。
これはもう必要ありません。削除すると、/ etc/nslcd.confが使用できなくなります。
。
出典:
手がかりはldapsearch
コマンド出力にあります:
TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0
それは言う:certificate ... is not valid... Peer's certificate issuer has been marked as not trusted by the user
。つまり、サーバー証明書の発行に使用されるCAは信頼されていません。 CACERTFILE TLS_CACERTFILE /srv/ldap-cacert.pem
には正しいCA証明書が含まれていません。エラーclean ldapsearch
出力が表示されるまで機能しません。
それが解決されると、証明書のCNが原因でエラーが発生する可能性があります。もしそうなら、ldaps://sub.example.org/
の代わりにURIとしてldaps://10.1.1.42/
。 DNSがその名前を解決しない場合は、/etc/hosts
ファイル(テストのためだけに、DNSレコードを更新する必要があります)。