2016-06-30 4 views
0

python-ldapを使用しているときにldap.OPT_X_TLS_REQUIRE_CERTをldap.OPT_X_TLS_NEVERに設定していますが、まだTLSエラーが発生します。私はldap.set_optionとあなたが以下で見るバージョンを試しました。両方とも同じエラーが発生します。ldap.OPT_X_TLS_REQUIRE_CERTがldap.OPT_X_TLS_NEVERに設定されている場合のPython LDAP TLSエラー

class adldap_connection: 
    def __init__(self, configuration, secure): 
     self.configuration = configuration 
     self.secure = secure 
     self.ldap_host_template = string.Template(self.configuration['host']) 
     if self.secure: 
      self.ldap_host = self.ldap_host_template.substitute(port=self.configuration['secure_port']) 
     else: 
      self.ldap_host = self.ldap_host_template.substitute(port=self.configuration['standard_port']) 

    def __enter__(self): 
     try: 
      self.ld = ldap.initialize(self.ldap_host) 
      if self.configuration['verify_ssl']['verify']: 
       self.ld.set_option(ldap.OPT_X_TLS_CACERTFILE, self.configuration['verify_ssl']['use']) 
       print "ldap.OPT_X_TLS_CACERTFILE = %d" % ldap.OPT_X_TLS_CACERTFILE 
      else: 
       self.ld.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 
       print "ldap.OPT_X_TLS_REQUIRE_CERT = %d" % ldap.OPT_X_TLS_REQUIRE_CERT 
       print "ldap.OPT_X_TLS_NEVER = %d" % ldap.OPT_X_TLS_NEVER 
       #ldap.set_option(ldap.OPT_X_TLS_NEWCTX, 0) 

      self.ld.simple_bind_s(self.configuration['binduser'], self.configuration['bindpassword']) 
     except ldap.LDAPError, error_message: 
      print "Couldn't Connect. %s " % error_message 
      print "Using CA: %s" % self.configuration['verify_ssl']['use'] 
      if (self.configuration['verify_ssl']['use']): 
       print "File exists: %s" % os.path.exists(self.configuration['verify_ssl']['use']) 
     return self.ld 

    def __exit__(self, exc_type, exc_value, traceback): 
     self.ld.unbind_s() 

私のpython-LDAPメーリングリストから、この例外

ldap.OPT_X_TLS_REQUIRE_CERT = 24582 
ldap.OPT_X_TLS_NEVER = 0 
Couldn't Connect. {'info': "TLS error -8179:Peer's Certificate issuer is not recognized.", 'desc': "Can't contact LDAP server"} 

答えて

1

を得る:

あなたは接続固有の設定したい場合はTLSを使用して、

self.ld.set_option(ldap.OPT_X_TLS_NEWCTX, 0)を使用しなければならないパラメータ

as最後にTLSパラメータを指定してsetoption()を呼び出します。

は、私は両方のケースのために働く、これで終わった

try: 
     self.ld = ldap.initialize(self.ldap_host) 
     if self.configuration['verify_ssl']['verify']: 
      self.ld.set_option(ldap.OPT_X_TLS_CACERTFILE, self.configuration['verify_ssl']['use']) 
     else: 
      self.ld.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 
     self.ld.ldap.set_option(ldap.OPT_X_TLS_NEWCTX, 0) 
関連する問題