Change root cert only in cert used by Front Door

Mattia 36 Reputation points
2025-09-22T07:04:31.4433333+00:00

Hello,

in a website published through Front Door (classic), we have been using certificates issued by Sectigo, who started using their new root certificates in June.

We renewed the certificate in the past weeks, and the .pfx I created and uploaded to the Key Vault contained the new root certificate.

Unfortunately, an application that needs to connect there doesn't recognize the new root yet and it's proving to be paid to update the set of CA, so I wanted to change the root -and only the root- to the previous one that is signed by another CA. That's fine to do, since the intermediate is unchanged and cross-signed; in fact I have accidentally being used the same certificate with the "old" chain in another place successfully.

I created a new .pfx with the new cert but old chain:

% openssl pkcs12 -info -in foo.pfx
...
Certificate bag
Bag Attributes
    localKeyID: 22 32 98 41 54 73 10 FB BE 8B 27 FE 5A 64 B7 F9 17 23 60 36
subject=CN=*.XXXXXXXXXXXX
issuer=C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV R36
.....
Certificate bag
Bag Attributes: <No Attributes>
subject=C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV R36
issuer=C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
......
Certificate bag
Bag Attributes: <No Attributes>
subject=C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
issuer=C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority

Nevertheless, Front Door does not seem to pick this. I also tried explicitly selecting this certificate in the drop-down instead of "Latest", but as I can clearly see using openssl s_client:

% openssl s_client -showcerts -connect XXXXXXXXX:443  </dev/null 2>&1|grep -C 4 R46
Connecting to 2620:1ec:27:e621::cafe:e621
depth=2 C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
verify return:1
depth=1 C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV R36
verify return:1
depth=0 CN=XXXXXXXXXX
--
1TOMkqZgk/ygV2PmUrhdM6KfuwVooWZHSbtJo+PFmyBeoQA+TONNVTVRFSLSAktr
mHVXR9JpJKaGzoIEd+WwjnPRefIX2V1176I=
-----END CERTIFICATE-----
 1 s:C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV R36
   i:C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
   a:PKEY: RSA, 3072 (bit); sigalg: sha384WithRSAEncryption
   v:NotBefore: Mar 22 00:00:00 2021 GMT; NotAfter: Mar 21 23:59:59 2036 GMT
-----BEGIN CERTIFICATE-----
MIIGTDCCBDSgAwIBAgIQOXpmzCdWNi4NqofKbqvjsTANBgkqhkiG9w0BAQwFADBf
--
7ABvc7BYSQubQ2490OcdkIzUh3ZwDrakMVrbaTxUM2p24N6dB+ns2zptWCva6jzW
r8IWKIMxzxLPv5Kt3ePKcUdvkBU/smqujSczTzzSjIoR5QqQA6lN1ZRSnuHIWCvh
JEltkYnTAH41QJ6SAWO66GrrUESwN/cgZzL4JLEqz1Y=
-----END CERTIFICATE-----
 2 s:C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
   i:C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46
   a:PKEY: RSA, 4096 (bit); sigalg: sha384WithRSAEncryption
   v:NotBefore: Mar 22 00:00:00 2021 GMT; NotAfter: Mar 21 23:59:59 2046 GMT
-----BEGIN CERTIFICATE-----
MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf

Which is the new self-signed root, not the old one.

What could I possibly be missing here? Thank you in advance.

Azure Front Door
Azure Front Door
An Azure service that provides a cloud content delivery network with threat protection.
{count} votes

2 answers

Sort by: Most helpful
  1. Anonymous
    2025-09-23T07:50:38.6766667+00:00

    Hi Mattia,

    Thanks for your detailed question on Microsoft Q&A!

    "You can use your own certificate through an integration with Azure Key Vault. Ensure your certificate is from a Microsoft Trusted CA List and has a complete certificate chain."

    "The certificate must have a complete certificate chain with leaf and intermediate certificates, and root CA must be part of the Microsoft Trusted CA list."

    This means that when you upload your certificate to Azure Key Vault for use by Azure Front Door:

    • Your .pfx file must contain the complete chain, which includes the leaf certificate and the intermediate certificates.
    • The root CA certificate should be from a Microsoft Trusted CA List, meaning it must be an officially trusted root by clients and Microsoft’s platform.

    However, crucially for Azure Front Door (Classic):

    • Azure Front Door Classic does not serve the root certificate from your uploaded chain.
    • Azure Front Door Classic automatically rebuilds the certificate trust chain on its side based on the leaf certificate and uses the root certificates trusted and distributed by Microsoft’s global network.
    • This means even if you upload a PFX with an older or custom root certificate, Front Door will ignore it and serve the root it trusts internally.
    • This behavior ensures chain consistency and security across Azure’s edge nodes but restricts control over which root certificate is actually presented to clients.

    If you want explicit control over the entire certificate chain, including root:

    • Consider migrating from Azure Front Door Classic to Azure Front Door Standard or Premium, which support custom certificate chains with full Key Vault integration, allowing you to serve exactly the chain you upload.

    I hope this helps to resolve the issue.

    Thanks!

    0 comments No comments

  2. Vincent Lieftink 0 Reputation points
    2025-12-11T10:30:01.8033333+00:00

    Hello,

    I'm experiencing the exact same issue as Mattia with Azure Front Door Premium (not Classic). I have a Sectigo wildcard certificate with a cross-signed chain for backward compatibility with legacy devices, but AFD is serving the modern self-signed root instead of the cross-signed path I uploaded.

    My setup:

    • Azure Front Door Premium (SKU: Premium_AzureFrontDoor)
    • Certificate stored in Azure Key Vault as PFX
    • PFX contains the complete cross-signed chain:
      • Leaf: *.domain.com
      • Intermediate: Sectigo Public Server Authentication CA DV R36
      • Cross-signed Root: Sectigo Public Server Authentication Root R46 (issued by AAA Certificate Services)
      • Old Root: AAA Certificate Services

    What I see:

    When I download the PFX from Key Vault and inspect it with openssl pkcs12 -info, it shows the correct cross-signed chain with AAA Certificate Services as the final issuer.

    However, when I test with openssl s_client -connect login.domain.com:443 -showcerts, AFD is serving only 3 certificates ending with the self-signed Sectigo Root R46, completely ignoring the cross-signed path.

    I need the cross-signed chain for compatibility with legacy systems that only trust the older AAA Certificate Services root (2004), not the newer Sectigo Root R46 (2021). The same certificate bundle works perfectly on nginx, serving all 4 certificates including the cross-signed root.

    My question:

    Mattia solved this by migrating from Front Door Classic to Front Door Standard. However, I'm already using Front Door Premium which should have even more features than Standard.

    Does AFD Premium support serving custom certificate chains as uploaded, or does it automatically optimize/rebuild the chain like Classic did? If not, what are my options?

    I've been working with Microsoft Support (case #2512040050001300) but haven't received a definitive answer yet on whether this is a service limitation or a configuration issue.

    The documentation states "The certificate must have a complete certificate chain with leaf and intermediate certificates" but doesn't clarify whether AFD respects cross-signed certificate paths or automatically selects the "optimal" chain.

    Additional context:

    • Custom domain provisioning state: Succeeded
    • Certificate type: CustomerCertificate
    • Same PFX works correctly on nginx with full cross-signed chain
    • Testing shows AFD serves the modern chain (3 certs) instead of the cross-signed chain (4 certs)

    Any guidance on whether this is supported in AFD Premium is advised.

    Thank you!

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.