[英]LDAP connection problem with self-signed cert
我正在使用的代碼:
# Create LDAPObject instance
conn = ldap.initialize(url)
conn.protocol_version=ldap.VERSION3
conn.simple_bind_s(binddn,bindpw)
# This raises:
# ldap.SERVER_DOWN:
{'info': 'error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed', 'desc': "Can't contact LDAP server"}
當我使用 ldap:// 而不是 ldaps:// 時,它工作正常。
誰能幫我弄清楚這是為什么?
謝謝。 :)
我來這里尋找解決我的問題的方法。 這個問答並沒有解決我的確切問題,但是其他人在尋找我的確切問題解決方案時會發現以下內容很有用:
對於那些使用SSL / TLS進行基本傳輸加密而非身份驗證(自簽名證書)的用戶,您只需關閉服務器證書的嚴格檢查:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
這大致類似於設置OpenLDAP 2.1+客戶端設置:
tls_checkpeer no
忽略證書錯誤
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
我從來沒有在SSL上使用python-ldap,但我相信你必須告訴ldap在服務器證書上執行哪些檢查。 如果將其設置為demand(可能是默認值),則必須為其提供有效的證書。
請參閱Demo目錄中的initialize.py源。
多注意連接字符串中的協議和端口:
將 TLS 與 python-ldap 結合使用:
# TLS uses string uri 'ldaP://' (NO 's')
# then the method start_tls_s() will transfer to a secure connection
l = ldap.initialize('ldap://localhost:1390',trace_level=ldapmodule_trace_level,trace_file=ldapmodule_trace_file)
# Set LDAP protocol version used
l.protocol_version=ldap.VERSION3
# Force cert validation
l.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_DEMAND)
# Set path name of file containing all trusted CA certificates
l.set_option(ldap.OPT_X_TLS_CACERTFILE,CACERTFILE)
# Force libldap to create a new SSL context (must be last TLS option!)
l.set_option(ldap.OPT_X_TLS_NEWCTX,0)
# Now try StartTLS extended operation
l.start_tls_s()
print('***ldap.OPT_X_TLS_VERSION',l.get_option(ldap.OPT_X_TLS_VERSION))
print('***ldap.OPT_X_TLS_CIPHER',l.get_option(ldap.OPT_X_TLS_CIPHER))
# Try an explicit anon bind to provoke failure
l.simple_bind_s('','')
# Close connection
l.unbind_s()
SSL 直接使用'ldapS://'!
而且它不使用 start_tls_s()
# Create LDAPObject instance
l = ldap.initialize('ldaps://localhost:1391',trace_level=ldapmodule_trace_level,trace_file=ldapmodule_trace_file)
# Set LDAP protocol version used
l.protocol_version=ldap.VERSION3
# Force cert validation
l.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_DEMAND)
# Set path name of file containing all trusted CA certificates
l.set_option(ldap.OPT_X_TLS_CACERTFILE,CACERTFILE)
# Force libldap to create a new SSL context (must be last TLS option!)
l.set_option(ldap.OPT_X_TLS_NEWCTX,0)
# Try an explicit anon bind to provoke failure
l.simple_bind_s('','')
print('***ldap.OPT_X_TLS_VERSION',l.get_option(ldap.OPT_X_TLS_VERSION))
print('***ldap.OPT_X_TLS_CIPHER',l.get_option(ldap.OPT_X_TLS_CIPHER))
# Close connection
l.unbind_s()
來源:原始開發者 github demo initialize.py
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.