Thorsten Habich: > I increased the log level. Looks like the correct certificate was found > in the tafile > > 2020-06-20T09:38:18.632247+02:00 servername postfix/tlsproxy[17324]: > mail.somedomain.net[10.11.12.13]:25: depth=1 matched trust anchor > certificate sha512 digest > 2020-06-20T09:38:18.632323+02:00 servername postfix/tlsproxy[17324]: > mail.somedomain.net[10.11.12.13]:25: depth=0 trust-anchor certificate > 2020-06-20T09:38:18.632396+02:00 servername postfix/tlsproxy[17324]: > mail.somedomain.net[10.11.12.13]:25: depth=1 verify=0 > subject=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
I did some further experiments, with posttls-finger and an explicit trust anchor, fixed the problem, and certificate verfication now works. Demo: on a non-DNSSEC host, use "posttls-finger -X " for force tlsproxy usage, and specify the remote SMTP server's server's own self-signed certificate as the trust anchor. # posttls-finger -X -A spike.porcupine.org.pem -l secure spike.porcupine.org posttls-finger: Connected to spike.porcupine.org[168.100.189.2]:25 posttls-finger: < 220 spike.porcupine.org ESMTP Postfix (3.6-20200610) posttls-finger: > EHLO wzv.porcupine.org posttls-finger: < 250-spike.porcupine.org posttls-finger: < 250-PIPELINING posttls-finger: < 250-SIZE 52428800 posttls-finger: < 250-ETRN posttls-finger: < 250-STARTTLS posttls-finger: < 250-ENHANCEDSTATUSCODES posttls-finger: < 250-8BITMIME posttls-finger: < 250-SMTPUTF8 posttls-finger: < 250 CHUNKING posttls-finger: > STARTTLS posttls-finger: < 220 2.0.0 Ready to start TLS posttls-finger: spike.porcupine.org[168.100.189.2]:25: subject_CN=spike.porcupine.org, issuer_CN=porcupine.org, fingerprint=DE:DA:83:61:79:C1:1D:E1:3F:F0:F5:A7:CF:84:FF:AD:85:6B:3A:9B, pkey_fingerprint=23:38:29:6E:29:0F:93:FC:A1:70:8F:9D:B3:A6:E8:9B:51:F6:F1:A1 posttls-finger: Verified TLS connection established to spike.porcupine.org[168.100.189.2]:25: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 . . . Below are the bug summary and patch. Wietse 20200620 Bugfix (introduced: Postfix 3.4): SMTP over TLS connection reuse was broken for configurations that use explicit trust anchors. Reported by Thorsten Habich. Fixed by calling DANE initialization unconditionally (WTF). File: tlsproxy/tlsproxy.c. diff '--exclude=man' '--exclude=html' '--exclude=README_FILES' '--exclude=INSTALL' '--exclude=.indent.pro' -r -ur /var/tmp/postfix-3.6-20200610/src/tlsproxy/tlsproxy.c src/tlsproxy/tlsproxy.c --- /var/tmp/postfix-3.6-20200610/src/tlsproxy/tlsproxy.c 2020-05-15 09:29:14.000000000 -0400 +++ src/tlsproxy/tlsproxy.c 2020-06-20 14:55:59.216357419 -0400 @@ -997,12 +997,12 @@ state->client_start_props->ctx = state->appl_state; state->client_start_props->fd = state->ciphertext_fd; /* These predicates and warning belong inside tls_client_start(). */ - if (!TLS_DANE_BASED(state->client_start_props->tls_level) - || tls_dane_avail()) - state->tls_context = tls_client_start(state->client_start_props); - else + if (!tls_dane_avail() /* mandatory side effects!! */ + &&TLS_DANE_BASED(state->client_start_props->tls_level)) msg_warn("%s: DANE requested, but not available", state->client_start_props->namaddr); + else + state->tls_context = tls_client_start(state->client_start_props); if (state->tls_context != 0) return (TLSP_STAT_OK);