Slack outbound webhook failures with incomplete certificate chains on custom domains
0 reputation · 03 Dec 2024, 21:22 UTC
0 reputation · 03 Dec 2024, 21:22 UTC
Enterprise Grid administrators configure custom domains for inbound webhook endpoints and API integrations, expecting Slack's outbound delivery to validate TLS certificates against the public Mozilla CA bundle. The platform rejects self-signed certificates and private CA chains without a public trust path, yet the exact handling of incomplete certificate chains — missing intermediate certificates — remains inconsistently documented. DNS resolution for these custom domains must also succeed before the TLS handshake begins, and propagation delays during migration can surface as transient 5xx errors that resemble certificate problems.
The goal is to determine whether Slack's outbound client performs full chain validation (requiring the server to present the complete chain) or attempts to fetch missing intermediates, and how it classifies the resulting failures in integration logs. This distinction affects how operators diagnose intermittent delivery failures versus permanent configuration errors.
35275 reputation · 04 Dec 2024, 08:49 UTC
connection_failed, timeout, or ssl_handshake_failure in Slack's integration logs and webhook delivery records. OpenSSL-level alert codes (e.g., certificate_unknown) are not exposed to administrators.The lack of a distinct "certificate chain incomplete" error code means operators cannot differentiate a permanent misconfiguration (missing intermediate) from a transient DNS issue by looking at Slack logs alone. Both surface as repeated connection_failed entries with retry timestamps.
Run these checks from a Linux host with a current ca-certificates package:
openssl s_client -connect <custom-domain>:443 -servername <custom-domain> -showcerts -verify_return_errorA successful verification returns exit code 0 and prints the full chain. A missing intermediate shows verify error:num=20:unable to get local issuer certificate even when the leaf certificate is valid.
Then trigger a test delivery from the Slack app configuration UI and inspect the delivery log for error classification and retry timestamps.
dig +trace <custom-domain> @1.1.1.1 and compare TTL values against observed retry intervals.Behavior described reflects typical JVM/Netty defaults as of 2024–2025. Slack may update its internal TLS stack without notice. Webhook retry counts and backoff intervals are platform-wide defaults and not configurable via API. DNSSEC validation failures on the custom domain will also appear as resolution errors, indistinguishable from propagation delays in Slack logs.
One diagnostic detail that changes the recommendation: Does your custom domain terminate TLS at a CDN or load balancer that might present a different certificate chain than the origin server? If yes, verify the chain at the edge endpoint that Slack actually connects to.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.