Package: dovecot-core
Version: 1:2.2.13-12~deb8u1

Hi,
when configuring a doveadm listener service on a TCP port with SSL enabled, 
the server sends only the last certificate on the chain, instead of the 
complete chain.
The same server, when being contacted on IMAPS port, correctly sends the whole 
chain.

This issue is not present on the same upstream version (2.2.13), nor in the 
Debian jessie-backport version (1:2.2.26.0-4~bpo8+1), and impacts services as 
dsync mailbox replication (it complains about being unable to get issuer or 
local issuer certificate, depending on the certificate the sync client 
compares against).

Sample output from openssl s_client (the real domains are obfuscated for 
privacy reasons):
(doveadm port [15015]):
|$ openssl s_client -connect server.fqdn:15015
|CONNECTED(00000003)
|depth=0 CN = mail.server.fqdn
|verify error:num=20:unable to get local issuer certificate
|verify return:1
|depth=0 CN = mail.server.fqdn
|verify error:num=21:unable to verify the first certificate
|verify return:1
|---
|Certificate chain
| 0 s:/CN=mail.server.fqdn
|   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
|---
...

|(IMAPS port [993]):
|$ openssl s_client -connect server.fqdn:993
|CONNECTED(00000003)
|depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
|verify return:1
|depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
|verify return:1
|depth=0 CN = mail.server.fqdn
|verify return:1
|---
|Certificate chain
| 0 s:/CN=mail.server.fqdn
|   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
| 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
|   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
|---
...

This is the relevant output of dovecot -n:
|$ dovecot -n
|# 2.2.13: /etc/dovecot/dovecot.conf
|# OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.6 
|auth_default_realm = server.fqdn
|auth_mechanisms = plain login
|doveadm_password = (redacted)
|doveadm_port = 15015
|mail_location = maildir:~/Maildir
|mail_plugins = " notify replication"
|namespace inbox { (removed) }
|passdb {
|  driver = pam
|}
|passdb {
|  args = username_format=%n /etc/vmail/%d/passwd
|  driver = passwd-file
|}
|plugin {
|  mail_replica = tcps:other.server.fqdn
|}
|protocols = " imap"
|service aggregator {
|  fifo_listener replication-notify-fifo {
|    mode = 0666
|    user = dovecot
| }
|  unix_listener replication-notify {
|    mode = 0666
|    user = dovecot
|  }
|}
|service auth {
|  unix_listener auth-client {
|    group = Debian-exim
|    mode = 0660
|  }
|}
|service doveadm {
|  inet_listener {
|    port = 15015
|    ssl = yes
|  }
|}
|service imap-login {
|  inet_listener imap {
|    port = 143
|  }
|  inet_listener imaps {
|    port = 993
|    ssl = yes
|  }
|}
|service replicator {
|  process_min_avail = 1
|  unix_listener replicator-doveadm {
|    mode = 0600
|  }
|}
|ssl = required
|ssl_cert = </etc/letsencrypt/live/mail.server.fqdn/fullchain.pem
|ssl_client_ca_file = /etc/dovecot/certs.pem 
|ssl_key = </etc/letsencrypt/live/mail.server.fqdn/privkey.pem
|userdb {
|  driver = passwd
|}
|userdb {
|  args = uid=vmail gid=vmail home=/var/local/vmail/%d/%n
|  driver = static
|}

(As a workaround, the file /etc/dovecot/certs.pem contains the relevant root 
certificate and the missing intermediate one, cat'ed together).

Regards,
Juri Vitali

Reply via email to