Sectigo cross-sign on Windows Server
Sectigo issues every new TLS certificate from Sectigo Public Server Authentication Root R46 (RSA) and E46 (ECC). Clients that lack that root can only validate through the cross-signed certificate up to USERTrust RSA. Windows Server sends that chain only once the new root has been taken out of service locally.
The guide covers PositiveSSL, EssentialSSL, InstantSSL and Sectigo EV, across IIS, Exchange, RD Gateway, AD FS, Web Application Proxy, SQL Server, NPS and LDAPS.
Do you need this?
Sectigo moved issuance to R46 and E46 by validation level: EV on 15 April 2025, OV on 15 May 2025 and DV on 2 June 2025. Certificates issued before the date that applies to your product still chain up to USERTrust RSA, and there is nothing for you to do.
If the server sends the short chain to R46, these clients fail:
- iOS and iPadOS before 17.4 and macOS before 14.4. The root entered the Apple list in March 2024, so an iPhone X that cannot be updated further never receives it.
- Android 13 and older. The root reached AOSP with Android 15, and Android 14 through the Mainline update of Conscrypt.
- Java installations that never received the July 2025 update (8u461, 11.0.28, 17.0.16, 21.0.8).
- Windows machines without outbound internet access, which cannot fetch new roots from Windows Update.
- Embedded equipment, payment terminals, printers and industrial devices with a fixed trust store.
On Linux you simply add the cross-signed certificate to the chain file after the intermediate and reload the web server. The rest of this guide is about Windows, where Schannel builds the chain itself.
The two files you need
You need both the issuing intermediate and the cross-sign certificate. The intermediate binds your certificate to R46, and the cross-sign binds R46 to USERTrust RSA. Miss either one and the chain breaks.
1. Issuing intermediate (R36)
Pick the one matching your validation level. The name appears in your certificate Issuer field.
- DV: Sectigo Public Server Authentication CA DV R36
- OV: Sectigo Public Server Authentication CA OV R36
- EV: Sectigo Public Server Authentication CA EV R36
- ECC: the corresponding E36 variants
The file is in the certificate bundle you download from the FairSSL control panel, and on the Sectigo overview of roots and issuing CAs.
2. Cross-sign towards the old root
- RSA: R46 signed by USERTrust RSA (valid until 18 January 2038)
crt.sectigo.com/SectigoPublicServerAuthenticationRootR46_USERTrust.crt - ECC: E46 signed by USERTrust ECC (valid until 18 January 2038)
crt.sectigo.com/SectigoPublicServerAuthenticationRootE46_USERTrust.crt
After downloading, confirm that Subject is Sectigo Public Server Authentication Root R46 and Issuer is USERTrust RSA Certification Authority. If Subject and Issuer match, you downloaded the root itself rather than the cross-sign.
FairSSL ships the long chain by default. If you download the certificate bundle from the control panel or fetch it over our ACME server, it already contains both the R36 intermediate and the cross-sign certificate, so you can skip the download step.
Procedure on Windows Server
1. Open the machine certificate store
Run certlm.msc from a command line started as administrator. Alternatively: Win+R, mmc, File → Add/Remove Snap-in, choose Certificates, Computer account, Local computer. The machine store is what matters. Certificates in the user store take no part in the chain the server sends.
2. Import the issuing intermediate
- Expand Intermediate Certification Authorities and click the Certificates subfolder.
- Right-click → All Tasks → Import.
- Select the R36 file. Switch the file type to All Files (*.*) if it does not show.
- Confirm the store is Intermediate Certification Authorities → Finish.
3. Import the cross-sign certificate
Repeat step 2 with SectigoPublicServerAuthenticationRootR46_USERTrust.crt. The file belongs in Intermediate Certification Authorities, not in Trusted Root. It is technically an intermediate, because it was signed by someone else.
Then confirm that USERTrust RSA Certification Authority is present in Trusted Root Certification Authorities. Without the old root the server cannot build the long chain. The root ships with every maintained Windows version.
4. Quarantine the new Sectigo root
As long as Sectigo Public Server Authentication Root R46 is active in Trusted Root, Schannel builds the short chain and sends it. The cross-sign certificate then sits unused in the Intermediate store.
Option A: move the root into the Disallowed store
Sectigo publishes two reg files for this, IISFix-MoveSectigoSelfSignedRoots-Disallowed.reg and IISFix-MoveSectigoSelfSignedRoots-Restore.reg, in their article on IIS certificates that are not widely trusted. The reg file moves R46 and E46 into the Disallowed store, where automatic root update cannot put them back.
The manual equivalent: right-click Untrusted Certificates → Certificates → All Tasks → Import and select the R46 root file.
Option B: disable all purposes
- Go to Trusted Root Certification Authorities → Certificates and find Sectigo Public Server Authentication Root R46.
- Double-click and confirm on the Details tab that Subject and Issuer match. That identifies the root rather than the cross-sign.
- Right-click → Properties → General tab → Disable all purposes for this certificate → OK. Some sources say clearing Server Authentication alone under Enable only the following purposes is enough. We have not confirmed that.
Never delete the root. Microsoft writes in KB 2831004: "if the Turn off Automatic Root Certificates Update Group Policy setting is disabled or not configured on the server, the certificate ... you don't want to use may be enabled or installed when the next chain building occurs." A deleted root is fetched again from Windows Update at the next chain build. The difference between the two options is durability: automatic root update cannot touch the Disallowed store, while the purpose flags in Trusted Root can be set back. Both apply only to the server you change, and on that server they affect everything that would otherwise validate up to that root. A certificate with another way up, through the cross certificate to the older root for instance, still validates.
5. Re-export the PFX with its chain and rebind
Some services hold on to the chain that was in the PFX the certificate was imported from. Export the certificate again with the full chain and bind it to the service anew.
$pw = Read-Host -AsSecureString "PFX password"
Export-PfxCertificate -Cert Cert:\LocalMachine\My\<THUMBPRINT> `
-FilePath C:\temp\server-with-chain.pfx -Password $pw -ChainOption BuildChain -ChainOption BuildChain builds the chain from the machine stores, that is, after the root has been quarantined. Import the PFX again and bind it to the service that uses the certificate.
6. Restart
Chain data is cached in the process that built the chain, and in lsass and HTTP.SYS. A full Windows restart is the only way to clear all of it. Restarting the individual role does not reach the Schannel chain cache, so the service can answer with the old chain afterwards and look as though the change did not work. Plan a restart window.
The change applies to the whole machine. If the server runs both IIS and AD FS, you change the chain for both. Run the verification against each service and port, not only against port 443.
Verification
certutil -verify, certutil -verifystore and Test-Certificate show the server own view of the chain. They say nothing about what HTTP.SYS or Schannel actually sends. Verify from the outside.
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts </dev/null \
| grep -E "^ *[0-9] s:|^ *i:"
You should see three certificates: your server certificate, Sectigo Public Server Authentication CA ... R36 and Sectigo Public Server Authentication Root R46. The i: line of the last certificate must read USERTrust RSA Certification Authority. If the last link shows R46 in both subject and issuer, the server is still sending the short chain.
- The FairSSL SSL Scanner shows the full delivered chain and the root it points at.
- Internal servers with no access from the internet: run testssl.sh from another machine on the network.
SSL Labs alone is not enough. SSL Labs trusts R46 itself and awards an A on the short chain while an Android 13 phone fails. Read the chain list in the report rather than the grade. The flags "Chain issues: Incomplete" and "Contains anchor" carry information, an A does not.
Back to the default
Run the Sectigo IISFix-MoveSectigoSelfSignedRoots-Restore.reg, or remove the root from Untrusted Certificates and set it back to Enable all purposes in Trusted Root. Reboot the server. The cross-sign certificate can stay in the Intermediate store, because Schannel picks the short chain again as soon as the root is active.
Related content
GlobalSign and AlphaSSL
The same procedure with R46 by R3 and E46 by R5.
DigiCert G5
Thawte, RapidSSL, GeoTrust and DigiCert once the chain points at G5.
Cross-signing in general
The background to chain selection on Windows and GPO rollout to many servers.
Root certificate compatibility
How the shields on every product are calculated.
The industry changes root
The dates per CA and the background to all of it.
Installation service
We install the cross-sign and test the chain on your servers. Fixed price per server.
Frequently asked questions about the Sectigo cross-sign
Find answers to the most common questions about SSL certificates and FairSSL.
Want us to set up the long chain for you?
Create a free account and order your first certificate. A DV certificate is issued in under 2 minutes.