簡體   English   中英

通過 ldaps 使用 python-ldap 連接到 apacheds

[英]Connect to apacheds using python-ldap over ldaps

我已經安裝了一個 ApacheDS(Apache 目錄)並試圖通過 ldaps 連接它。 我能夠通過 ldap(端口 10389)成功對其進行身份驗證,但嘗試使其在 ldaps 上工作時出現錯誤。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 445, in simple_bind_s
    msgid = self.simple_bind(who,cred,serverctrls,clientctrls)
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 439, in simple_bind
    return self._ldap_call(self._l.simple_bind,who,cred,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 331, in _ldap_call
    reraise(exc_type, exc_value, exc_traceback)
  File "/usr/local/lib/python3.6/dist-packages/ldap/compat.py", line 44, in reraise
    raise exc_value
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 315, in _ldap_call
    result = func(*args,**kwargs)
ldap.SERVER_DOWN: {'desc': "Can't contact LDAP server", 'errno': 2, 'info': '(unknown error code)'}
>>>

我知道這是由於證書驗證。

用於身份驗證的代碼是:

import ldap
import os
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_DEMAND)
ls = ldap.initialize('ldaps://10.120.213.106:10636', trace_level=2)
ls.set_option(ldap.OPT_REFERRALS, 0)
ls.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
ls.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
ls.set_option(ldap.OPT_X_TLS_DEMAND, True)
ls.set_option(ldap.OPT_DEBUG_LEVEL, 4095)
ls.set_option(ldap.OPT_X_TLS_CACERTFILE, "/tmp/server.cer")
ls.simple_bind_s('uid=admin,ou=system', 'secret')

我無法找到 ApacheDS 默認提供的自簽名證書,因此我使用創建了一個證書和一個密鑰庫

keytool -genkey -keyalg "RSA" -dname "cn=hax,ou=some,dc=com, o=ASF, c=US" -alias hax -keystore hax.ks -storepass secret -validity 730

然后使用以下命令將證書導出到受信任的密鑰庫中:

keytool -export -keystore hax.ks -alias hax -file hax.cer
keytool -import -file hax.cer -alias hax -keystore trusted.ks -storepass secret

將 apacheDS 配置為使用 hax.ks 作為 keyotre 並重新啟動它。 我也嘗試過ls.set_option(ldap.OPT_X_TLS_CACERTFILE, "/tmp/trusted.ks")但沒有運氣。

我在這里想念什么? 注意:我可以通過將ldap.OPT_X_TLS_REQUIRE_CERT設置為允許或從不連接。 但我不想這樣做,但要驗證證書。

對於連接到測試或開發服務器的腳本,我總是使用

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)

另外,建議使用 StartTLS 擴展,所以連接到明文端口(389 或 10389)然后發出

conn.start_tls_s()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM