On Tue, May 02, 2023 at 07:03:55PM -0400, PGNet Dev via Postfix-users wrote:
> > Also look into other possibilities, the DST Root issue is a bit of a
> > longshot. If you can get an account on Outlook.com, send mail and
> > see if it bounces with usable diagnostics in the bounce.
>
> I changed the preferred chain here, and for all my domains (thx o/ !).
> it certainly didn't hurt.
Presumably you then also *force* renewed the certificate chain.
> But, i'm increasingly sure that your original speculation was correct
> -- bad rollover. cleaning up DNS config, and forcing a clean
> rollover, seems to have done the trick.
But your original chain did validate as far as posttls-finger was
concerned, so perhaps the root CA was the issue?
> After the dns cleanup, switching BACK the preferred chain didn't
> reinit the issue.
Did you *force* renewal at that point?
> When I looked at the logs I was given, DNSSEC/dane issues didn't leap
> out at me -- but you mentioned them.
>
> What in those logs suggested DNSSEC/dane to you? Anything specific,
> or just likelihood?
Microsoft is one of the few *large* email providers (Google, Microsoft,
Yahoo) that supports DANE (for now just outbound). But DANE appeared to
be fine on your end.
> In any case, I want to set up a DNSSEC rollover 'canary' ...
> tool/script that'll notify me on failures, like "this". Before I cobble
> something up from scratch -- is there a recommended/best-practice tool
> for the job?
See
https://github.com/baknu/DANE-for-SMTP/wiki/2.-Implementation-resources#221-deployment-and-monitoring
Perhaps, specifically: https://github.com/PennockTech/smtpdane but let
us know which worked out best for you.
However, perhaps simple is best in which case tweak the attached bash
shell script to meet your needs. Note this only tests one IP address
per probe, a full check would try all IP addresses both IPv4 and IPv6 as
well as all permutations of TLS 1.2/1.3 and preferred public key
algorithm. Extending the script to do more tests should be easy.
Sample output from "danesmtp mx1-edge.pgnetwork.net":
=== TLS 1.3 with ECDSA preferred:
verify depth is 9
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_CHACHA20_POLY1305_SHA256
Requested Signature Algorithms:
ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:ECDSA+SHA1:RSA+SHA224:RSA+SHA1
Peer certificate: CN = mx1-edge.pgnetwork.net
Hash used: SHA384
Signature type: ECDSA
Verification: OK
DANE TLSA 3 1 2 ...18133fc2d94d1260e012bf5a matched EE certificate at depth 0
Server Temp Key: X25519, 253 bits
250 SMTPUTF8
DONE
=== TLS 1.3 with RSA preferred:
verify depth is 9
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_CHACHA20_POLY1305_SHA256
Requested Signature Algorithms:
ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:ECDSA+SHA1:RSA+SHA224:RSA+SHA1
Peer certificate: CN = mx1-edge.pgnetwork.net
Hash used: SHA384
Signature type: ECDSA
Verification: OK
DANE TLSA 3 1 2 ...18133fc2d94d1260e012bf5a matched EE certificate at depth 0
Server Temp Key: X25519, 253 bits
250 SMTPUTF8
DONE
=== TLS 1.3 with EDDSA preferred:
verify depth is 9
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_CHACHA20_POLY1305_SHA256
Requested Signature Algorithms:
ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:ECDSA+SHA1:RSA+SHA224:RSA+SHA1
Peer certificate: CN = mx1-edge.pgnetwork.net
Hash used: SHA384
Signature type: ECDSA
Verification: OK
DANE TLSA 3 1 2 ...18133fc2d94d1260e012bf5a matched EE certificate at depth 0
Server Temp Key: X25519, 253 bits
250 SMTPUTF8
DONE
=== TLS 1.2 with ECDSA preferred:
verify depth is 9
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-ECDSA-AES256-GCM-SHA384
Requested Signature Algorithms:
ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:ECDSA+SHA1:RSA+SHA224:RSA+SHA1:DSA+SHA224:DSA+SHA1:DSA+SHA256:DSA+SHA384:DSA+SHA512
Peer certificate: CN = mx1-edge.pgnetwork.net
Hash used: SHA256
Signature type: ECDSA
Verification: OK
DANE TLSA 3 1 2 ...18133fc2d94d1260e012bf5a matched EE certificate at depth 0
Supported Elliptic Curve Point Formats:
uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: X448, 448 bits
250 SMTPUTF8
DONE
=== TLS 1.2 with RSA preferred:
verify depth is 9
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-ECDSA-AES256-GCM-SHA384
Requested Signature Algorithms:
ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:ECDSA+SHA1:RSA+SHA224:RSA+SHA1:DSA+SHA224:DSA+SHA1:DSA+SHA256:DSA+SHA384:DSA+SHA512
Peer certificate: CN = mx1-edge.pgnetwork.net
Hash used: SHA256
Signature type: ECDSA
Verification: OK
DANE TLSA 3 1 2 ...18133fc2d94d1260e012bf5a matched EE certificate at depth 0
Supported Elliptic Curve Point Formats:
uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: X448, 448 bits
250 SMTPUTF8
DONE
--
Viktor.
#! /usr/bin/env bash
if [ $# -eq 0 ]; then
host=$(uname -n)
else
host="$1"
shift
fi
if ! printf "%s\n" "$host" | grep -s -q '\.'; then
host=$(
(
dig +search +noall +ans +nocl +nottl -t a "$host"
dig +search +noall +ans +nocl +nottl -t aaaa "$host"
) | awk '$2 == "A" || $2 == "AAAA" {print $1; exit}' |
sed 's/\.$//'
)
fi
danesmtp () {
local host=$1
shift
local opts=(-starttls smtp "$@" -connect "$host:25" -verify 9 \
-verify_return_error -brief \
-dane_ee_no_namechecks -dane_tlsa_domain "$host")
set -- $(dig +short +nosplit -t tlsa "_25._tcp.$host" |
egrep -i '^[23] [01] [012] [0-9a-f]+$')
while [ $# -ge 4 ]; do
opts=("${opts[@]}" "-dane_tlsa_rrdata" "$1 $2 $3 $4")
shift 4
done
( sleep 1; printf "QUIT\r\n" ) | openssl s_client "${opts[@]}" 2>&1
}
err=0
ecdsa="ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512"
rsa="RSA+SHA256:RSA+SHA384:RSA+SHA512"
rsapss="RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512"
rsapss_pss="rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_pss_pss_sha512"
rsaall="$rsa:$rsapss:$rsapss_pss"
eddsa="ed25519:ed448"
# First with ECDSA preferred
printf "\n=== TLS 1.3 with ECDSA preferred:\n"
danesmtp "$host" -tls1_3 -sigalgs "$ecdsa:$rsaall:$eddsa" || {
err=$?
printf "TLS 1.3 with ECDSA preferred failed\n"
}
# Next with RSA preferred over ECDSA
printf "\n=== TLS 1.3 with RSA preferred:\n"
danesmtp "$host" -tls1_3 -sigalgs "$rsaall:$ecdsa:$eddsa" || {
err=$?
printf "TLS 1.3 with RSA preferred failed\n"
}
# Next with EDDSA preferred over ECDSA and RSA
printf "\n=== TLS 1.3 with EDDSA preferred:\n"
danesmtp "$host" -tls1_3 -sigalgs "$eddsa:$ecdsa:$rsaall" || {
err=$?
printf "TLS 1.3 with EDDSA preferred failed\n"
}
# Next with TLSv1.2 and ECDSA
printf "\n=== TLS 1.2 with ECDSA preferred:\n"
danesmtp "$host" -tls1_2 -sigalgs "$ecdsa:$rsa" \
-cipher 'aRSA:-aRSA:aECDSA:-aECDSA:HIGH:!COMPLEMENTOFDEFAULT' || {
err=$?
printf "TLS 1.2 with ECDSA preferred failed\n"
}
# Next with TLSv1.2 and RSA
printf "\n=== TLS 1.2 with RSA preferred:\n"
danesmtp "$host" -tls1_2 -sigalgs "$rsa:$ecdsa" \
-cipher 'aECDSA:-aECDSA:aRSA:-aRSA:HIGH:!COMPLEMENTOFDEFAULT' || {
err=$?
printf "TLS 1.2 with RSA preferred failed\n"
}
exit $err
_______________________________________________
Postfix-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]