web-dev-qa-db-ja.com

ldap_result:LDAPサーバーに接続できません(-1)

今日は、ポート636で実行されているopenldap-serverマシンを設定しました。別のopenldap-clientマシンからこのポートにtelnetで接続することもできます。接続を保護するために、このリンク ここにリンクの説明を入力 を使用してサーバーに自己署名証明書を作成し、証明書ファイルをクライアントにコピーしました。

SELinuxが両方のマシンで無効になっていること、およびクライアントの/etc/openldap/ldap.confファイルにオプションTLS_REQCERTが許可されていることを確認しました

クライアントマシンの詳細な構成は次のとおりです。

# cat ldap.conf
URI ldap://ad.dfsi.dev:636
BASE dc=dfsi,dc=dev
TLS_CACERTDIR /etc/openldap/cacerts
TLS_REQCERT allow

とnslcdファイル:

# cat /etc/nslcd.conf
tls_reqcert allow
ssl start_tls
tls_cacertdir /etc/openldap/cacerts
tls_reqcert allow

SSLを使用しない場合、LDAPクライアントはすべてのLDAPユーザーにアクセスできます。しかし、authconfig-tui、ldaps://ad.xx.dev:636を介してTLSを使用するように構成を変更すると、失敗します。

ログは、クライアントがサーバーに正常に接続したことを示していますが、次にサーバーは次のように接続をドロップします。

ldapsearch -x -d 1
ldap_create
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_Host: TCP ad.dfsi.dev:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_Host: Trying xx.xx.xx.xx:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect: 
connect success
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_scanf fmt ({i) ber:
ber_flush2: 14 bytes to sd 3
ldap_result ld 0x7f8f75e1d150 msgid 1
wait4msg ld 0x7f8f75e1d150 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f8f75e1d150 msgid 1 all 1
** ld 0x7f8f75e1d150 Connections:
* Host: ad.dfsi.dev  port: 636  (default)
  refcnt: 2  status: Connected
  last used: Tue Nov 29 15:01:28 2016


** ld 0x7f8f75e1d150 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f8f75e1d150 request count 1 (abandoned 0)
** ld 0x7f8f75e1d150 Response Queue:
   Empty
  ld 0x7f8f75e1d150 response count 0
ldap_chkResponseList ld 0x7f8f75e1d150 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f8f75e1d150 NULL
ldap_int_select
read1msg: ld 0x7f8f75e1d150 msgid 1 all 1
ber_get_next
ldap_err2string
ldap_result: Can't contact LDAP server (-1)
ldap_free_request (origid 1, msgid 1)
ldap_free_connection 1 1
ldap_free_connection: actually freed

Opensslを実行すると、クライアントがサーバー上で証明書を見つけられないことが示されます。

# openssl s_client -showcerts -connect ad.dfsi.dev:636 
CONNECTED(00000003)
140330386184096:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 247 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

nss-pam authconfg-tuiは、以前の設定を上書きするたびに新しいCACERTDIRを生成します。したがって、/ etc/openldap/cacertsフォルダーにも証明書ファイルを配置しました。

私のクライアントマシンはCentOS7で、サーバーはRedhat ec2インスタンスです。

これをトラブルシューティングするためのヒントを誰かに教えてもらえますか?

5
user388145

[〜#〜] starttls [〜#〜]は、接続が通常のポートで確立されている「明示的なTLS」を意味します次に[〜#〜] starttls [〜#〜]コマンドを送信して開始します[ 〜#〜] ssl [〜#〜]ハンドシェイクし、保護モードに切り替えます。

接続するには、-Zまたは-ZZスイッチをldapsearchに追加してみてください。

ldapsearch -x -d 1 -ZZ

クライアントを se starttls にすることです

OpenSSLは現在LDAPプロトコルのstarttlsをサポートしていないようです(man s_clientパラメータに関するmanページ-starttlsを参照してください)。

5
Slipeer

明確にするために:OpenLDAPサーバーでTLSの使用を設定しましたか?

まだいくつかのパラメータを設定する必要があります。参考のために、確認してください http://www.openldap.org/doc/admin24/tls.html#Server%20Configuration

私の理解では、クライアントはLDAPマシンに接続していますが、LDAPマシンはクライアントに配信する証明書を認識していません。

私の推測を確認または改ざんしていただけませんか?

1
dim-0