StartTLS with errors on 2.4.17

Ralf Haferkamp rhafer at suse.de
Mon Sep 14 16:53:05 CEST 2009


Am Monday 14 September 2009 14:59:25 schrieben Sie:
> Ralf Haferkamp wrote:
> > Am Monday 14 September 2009 12:21:36 schrieben Sie:
> >> Hallo Ralf,
> >>
> >> Ralf Haferkamp wrote:
> >>> Are you able to reproduce it using
> >>> ldapsearch (that's what I used as I don't have your test code):
> >>
> >> Nein, leider nicht. Bzw. Dieter Klünter hat das getestet.
> >>
> >> Es kann auch durchaus an python-ldap liegen. Aber warum funktioniert es
> >>  dann mit 2.4.18 libldap?  Und wie sieht es mit den Backport-Packages
> >> von OpenSSL aus?
> >
> > Welche Backport-Packages von OpenSSL meinst du?
> >
> >>  Vielleicht irgendwelche subtilen Abhängigkeiten?
> >>
> >>> LDAPNOINIT=1 \
> >>> LDAPTLS_CACERT=/etc/ssl/certs/Wells_Fargo_Root_CA.pem \
> >>> ldapsearch -x -b "" -H ldap://dkluenter.dyndns.org -ZZ -d -1
> >>
> >> Ich habe mal das Test-Skript und CA-Cert angehängt.
> >
> > Ok, Ich habe das gerade mal ausprobiert. Bei mir funktioniert das wie
> > erwartet. Lediglich, wenn ich in TLS_REQCERT=allow
> > /etc/openldap/ldap.conf setze wird der Fehler ignoriert.
> 
> Hmm, das scheint tatsächlich der Fehler zu sein. Danke.
Phew, da bin ich ein wenig erleichert ;)
 
> Mein 2.4.18-Build schaut in einer anderen ldap.conf nach, da anderer
>  prefix. Ich dachte eigentlich, diese Code-Zeile hätte Vorrang vor
>  TLS_REQCERT allow in der ldap.conf.
> 
> l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
> 
> Noch nicht mal global gesetzt hilft:
> 
> ldap.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
Ich glaube du setzt die falsche Option. Korrekt wäre:

 LDAP_OPT_X_TLS_REQUIRE_CERT

bzw. 
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_DEMAND)

LDAP_OPT_X_TLS macht was ganz anderes. Damit kann man soweit ich das sehe tls 
aktivieren ohne explizit start_tls() aufzurufen.

Wenn ich jetzt in dem Testskript, vor dem ldap.initialize Aufruf das hier 
setze:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_DEMAND)
Dann schlägt der start_tls_s-Aufruf wie erwartet fehl.

Das funktioniert aber nur als globale Option. AFAIK ist das so, weil die 
Bibliothek den TLS context nur einmal global initialisiert, und nicht pro 
Verbindung. In C kann man den TLS context über LDAP_OPT_X_TLS_NEWCTX neu 
erzeugen lassen, kann sein, dass es damit auch nach dem ldap_initialize 
funktionieren würde.

 
> Es hilft tatsächlich nur im Skript (oder wie von Dir gesagt auf
>  Shell-Ebene):
> 
> os.environ['LDAPNOINIT']='1'
> 
> Spricht etwas dagegen in der ldap.conf Deiner Packages den Default-Wert so
>  zu setzen?
> 
> TLS_REQCERT     hard
Der Testaufwand. Wahrscheinlich machen danach einige YaST Module Probleme. 
Aber prinzipiell wäre es am besten die Option TLS_REQCERT ganz rauszulassen 
(der default ist ja "hard").

-- 
Gruß,
	Ralf 



More information about the python-ldap mailing list