Hi Stefan Hanrath - AcceptEasy,
By default, IIS (which underlies Windows App Services) only sends the leaf certificate and its immediate issuer (the intermediate certificate) during the TLS handshake. It does not automatically include the full chain, especially if there's a cross-signed root needed by older clients to establish trust.
In your case:
- Your certificate chain involves a modern root (R46) that's not trusted by older clients.
- A cross-signed version of that root exists (signed by an older root like
USERTrust RSA Certification Authority
) to support backward compatibility. - But since IIS isn't sending this cross-signed root, older clients (with outdated root stores) can’t validate the chain => resulting in TLS errors or unsafe site warnings.
You correctly uploaded the full certificate chain (including the root) in the .pfx
file to Key Vault or the App Service Certificate store, but App Service still only serves the leaf and intermediate certificates. This is expected behavior, as IIS does not include the root certificate in the TLS handshake, even if it's present in the .pfx
.
To ensure older clients also work, you need to manually serve the full certificate chain, including the cross-signed root, by using TLS certificate bundling.
- Host Full Certificate Chain via Azure Front Door or Application Gateway
Windows App Service has limited control over full chain delivery. Instead, use Azure Front Door or Application Gateway in front of the App Service and configure them with the full certificate chain, including the cross-signed root. These services give you full TLS chain control, support older clients, and also add benefits like global CDN and web application firewall (WAF).
- Upload the full certificate chain (
.pfx
including cross-signed root) to Azure Key Vault. - Link it to Azure Front Door or Application Gateway Listener using HTTPS configuration.
- Validate the full chain with SSL Labs
Use Azure Front Door with Key Vault
Configure SSL on Azure Application Gateway
- Use Linux App Service (Instead of Windows) for Full TLS Chain Control
Unlike Windows App Service, Linux-based App Services give you more flexibility. When you bring your own certificate using a custom container or custom domain binding, it can serve the full chain.
- Switch to Linux App Service Plan (if feasible).
- Bind your full
.pfx
that includes leaf + intermediate + cross-signed root certs. - Validate the chain again with tools like SSL Labs
Secure a custom domain with SSL in Linux App Service
If you must stay on Windows App Service, consider placing it behind Azure Front Door where you have full control of the TLS certificate chain. This is the most future-proof and compatible solution across all clients, especially legacy platforms.
If the answer is helpful, please click Accept Answer and kindly upvote it so that other people who faces similar issue may get benefitted from it.
Let me know if you have any further Queries.