On Thu Jun 26, 2025 at 8:21 AM CEST, Aki Tuomi wrote:
>
>> On 26/06/2025 09:10 EEST Bruno Hertz via dovecot <[email protected]> wrote:
>>
>>
>> Hi all
>>
>> I'm currently testing Dovecot 2.4, considering a migration from 2.3, and all
>> works fine except authentication against LDAP (openldap slapd) with client
>> certificates. Which I had no problem with on 2.3 for seven years or so.
>>
[ .. snip .. ]
>>
>> Thoughts?
>>
>> Greetings, Bruno
>> _______________________________________________
>> dovecot mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]
>
> Dovecot uses openldap library, so it should respect what you have set in
> openldap config file. Can you run with ldap_debug_level = 9 to see if there
> is something that would explain this?
>
> Aki
Hello Aki,
thanks for your reply. Did as you requested, and I hope something useful can be
gleaned from it.
First, dovecot gives plenty of:
dovecot: auth: Error: TLS trace: SSL_connect:error in SSLv3/TLS write client
hello
Then, from slapd, TLS connection established:
slapd[2439]: conn=1001 fd=18 TLS established tls_ssf=256 ssf=256
tls_proto=TLSv1.3 tls_cipher=TLS_AES_256_GCM_SHA384
Then, from dovecot, the handshake:
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS write client hello
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS read server hello
dovecot: auth: Error: TLS trace: SSL_connect:TLSv1.3 read encrypted
extensions
Then plenty of:
dovecot: auth: Error: TLS trace: SSL_connect:error in SSLv3/TLS read server
certificate request
Then, finally, we're coming to the point:
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS read server
certificate request
dovecot: auth: Error: TLS certificate verification: depth: 1, err: 0,
subject: /O=Mydomain Internal/CN=Root CA, issuer: /O=Mydomain Internal/CN=Root
CA
dovecot: auth: Error: TLS certificate verification: depth: 0, err: 0,
subject: /CN=*.mydomain.internal, issuer: /O=Mydomain Internal/CN=Root CA
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS read server
certificate
dovecot: auth: Error: TLS trace: SSL_connect:TLSv1.3 read server certificate
verify
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS read finished
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS write change cipher
spec
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS write client
certificate
dovecot: auth: Error: TLS trace: SSL_connect:SSLv3/TLS write finished
dovecot: auth: Error: ldap_int_sasl_open: host=ldaptest
dovecot: auth: Error: ldap_msgfree
dovecot: auth: Error: ldap_err2string
dovecot: auth: Error: ldap(ldaps://localhost.mydomain.internal:636): binding
failed (dn (none)): Unknown authentication method, SASL(-4): no mechanism
available:
dovecot: auth: Error: ldap_sasl_interactive_bind: user selected: external
dovecot: auth: Error: ldap_int_sasl_bind: external
dovecot: auth: Error: ldap_int_sasl_open: host=ldaptest
dovecot: auth: Error: ldap_msgfree
dovecot: auth: Error: ldap_err2string
dovecot: auth: Error: ldap(ldaps://localhost.mydomain.internal:636): binding
failed (dn (none)): Unknown authentication method, SASL(-4): no mechanism
available:
dovecot: imap-login : Login aborted: Logged out (auth service reported
temporary failure, 1 attempts in 3 secs) (temp_fail): user=<testuser>,
method=PLAIN, rip=192.168.0.2, lip=192.168.0.11, TLS, session=<606v3XM46t3AqAAC>
dovecot: auth: Error: ldap_free_connection 1 1
dovecot: auth: Error: ldap_send_unbind
dovecot: auth: Error: TLS trace: SSL3 alert write:warning:close notify
dovecot: auth: Error: ldap_free_connection: actually freed
So it does connect, does say it writes the client certificate, but
then I don't know how to read this.
For comparison the other end, slapd. First a simple ldapwhoami client
connection, which succeeds:
conn=1000 fd=18 TLS established tls_ssf=256 ssf=256 tls_proto=TLSv1.3
tls_cipher=TLS_AES_256_GCM_SHA384
tls_read: want=5, got=5
0000: 17 03 03 00 2b ....+
tls_read: want=43, got=43
0000: 63 a8 39 c4 f1 0c 75 53 9b 2e a9 7b b3 24 84 62 c.9...uS...{.$.b
0010: bb 01 32 0a 88 9d 39 c2 2f 06 1b ab 0d 59 a1 3b ..2...9./....Y.;
0020: 9d 71 e6 f2 a1 c1 dc 09 cc 1a 51 .q........Q
ldap_read: want=8, got=8
0000: 30 18 02 01 01 60 13 02 0....`..
ldap_read: want=18, got=18
0000: 01 03 04 00 a3 0c 04 08 45 58 54 45 52 4e 41 4c ........EXTERNAL
0010: 04 00 ..
tls_read: want=5 error=Resource temporarily unavailable
ldap_read: want=8 error=Resource temporarily unavailable
conn=1000 op=0 BIND dn="" method=163
So there we see the EXTERNAL request and the successful bind.
Now the dovecot client connection:
conn=1000 fd=18 TLS established tls_ssf=256 ssf=256 tls_proto=TLSv1.3
tls_cipher=TLS_AES_256_GCM_SHA384
tls_read: want=5, got=5
0000: 17 03 03 00 18 .....
tls_read: want=24, got=24
0000: 9c 7b cf 62 bf 11 3e 0c 30 db cf 5c 53 97 80 69 .{.b..>.0..\S..i
0010: 9f 97 cc d8 bf 53 87 f9 .....S..
ldap_read: want=8, got=7
0000: 30 05 02 01 01 42 00 0....B.
tls_read: want=5, got=5
0000: 17 03 03 00 13 .....
tls_read: want=19, got=19
0000: 44 f5 34 d2 cf cb 6f 9a 9d c6 38 c3 f0 34 9a 13 D.4...o...8..4..
0010: 77 8a 24 w.$
ldap_read: want=8, got=0
conn=1000 op=0 UNBIND
No EXTERNAL request and unbind after some timeout. So something
appears to go wrong with the SASL setup, but what exactly, and why?
Greeting, Bruno
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]