**Related issue:** Resolves #44348 **Base branch:** `docs-v4.86.0` (not `main`) per the docs release process. ## What this PR does Updates four customer-facing guides and adds a release-notes entry for Phase 2's opt-in cert renewal feature (shipped via #45696). Frames the marker as an opt-in enhancement: profiles without it continue to work as in 4.85; profiles with it activate auto-renewal. | Guide | Change | |-------|--------| | `connect-end-user-to-wifi-with-certificate.md` | Migrated 11 legacy `\$FLEET_VAR_SCEP_RENEWAL_ID` refs to the preferred name; added back-compat callout. | | `okta-conditional-access-integration.md` | Removed "Automatic renewal coming soon" line; added one-time upgrade-redeploy callout for existing customers. | | `enable-okta-verify-on-macOS-with-configuration-profile.md` | Added marker to example profile OU; added opt-in note and CA-side OU-preservation verification step. Coordinated with the earlier example-profile update from #43293 already on `docs-v4.86.0`. | | `enable-okta-verify-on-windows-using-a-scep-configuration-profile.md` | Replaced manual-redeployment narrative with auto-renewal guidance. Kept the policy-based expiry-monitoring SQL as an optional safeguard. | Release-notes entry (`changes/40639-non-proxied-cert-renewal`) consolidates Phase 2 customer-visible behavior in three bullets. ## Dependencies The Conditional Access guide's "new setups: no extra action needed" framing assumes #45662 (the Fleet-side template marker addition) has landed — it has, merged into the feature branch and onward into main via #45696. # Checklist for submitter - [x] Changes file added for user-visible changes ## Testing - [x] Doc review only — no code changes <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Automatic certificate renewal is now supported for SCEP and ACME certificates from external certificate authorities, enabled by default for new deployments with an opt-in path for existing customers * macOS devices with ACME-bearing configuration profiles will now surface hardware-bound certificates in device vitals <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Rachael Shaw <r@rachael.wtf> Co-authored-by: Marko Lisica <83164494+marko-lisica@users.noreply.github.com> Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com> Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> Co-authored-by: melpike <79950145+melpike@users.noreply.github.com> Co-authored-by: Noah Talerman <47070608+noahtalerman@users.noreply.github.com> Co-authored-by: Jordan Montgomery <elijah.jordan.montgomery@gmail.com> Co-authored-by: Jonathan Katz <44128041+jkatz01@users.noreply.github.com> Co-authored-by: Victor Lyuboslavsky <2685025+getvictor@users.noreply.github.com> Co-authored-by: Magnus Jensen <magnus@fleetdm.com> Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Co-authored-by: Scott Gress <scottmgress@gmail.com>
6.6 KiB
Enable Okta Verify on Windows using a SCEP configuration profile
Introduction
This guide explains how to enable Okta Verify on Windows using a SCEP client certificate delivered by the Windows ClientCertificateInstall CSP. Fleet supports Exec commands in configuration profiles, allowing you to deploy the SCEP configuration and trigger enrollment in a single profile.
Files
Profile XML: install Okta attestation certificate - [Bundle].xml
The profile is ready to use as-is. Fleet will replace the $FLEET_SECRET_* variables with your actual values when deploying to each device.
Prerequisites
1. Gather your Okta details
Collect from your Okta tenant:
- SCEP URL: Your Okta SCEP endpoint
- SCEP Challenge: Your static SCEP challenge (plain text, avoid special characters)
- CA Thumbprint: The SHA-256 thumbprint of your Okta CA certificate
2. Get your CA thumbprint
Download your Okta CA certificate and extract the SHA-256 thumbprint.
macOS/Linux:
openssl x509 -in ~/Downloads/ca.cer -noout -fingerprint -sha256
Windows:
certutil -hashfile ca.cer SHA256
Output will look like:
SHA256 Fingerprint=E2:18:D7:A7:B0:DF:ED:79:B2:05:73:BA:79:CB:14:B1:FE:EA:D2:7B
Remove the colons:
E218D7A7B0DFED79B20573BA79CB14B1FEEAD27B
3. SCEP challenge requirements
- Your SCEP challenge should be plain text
- Avoid special characters that can break XML or transport
- Recommended: letters, numbers only
- If your challenge contains
! @ # $ % ^ & * , ( ) _, rotate to a simpler value
Quick checklist
- SCEP URL confirmed
- SCEP challenge validated (plain text, simple characters)
- CA thumbprint ready (no colons, no spaces)
Deployment
1. Create Fleet secrets
Follow Fleet's guide: https://fleetdm.com/guides/secrets-in-scripts-and-configuration-profiles
Create these secrets in Fleet (Controls > Variables) or via GitOps:
| Secret name | Value |
|---|---|
OKTA_SCEP_URL |
Your SCEP endpoint URL |
OKTA_SCEP_CHALLENGE |
Your challenge (plain text, simple characters) |
OKTA_CA_THUMBPRINT |
Your thumbprint (no colons, no spaces) |
2. Deploy the profile
- Download the profile XML (link above)
- Navigate to Controls > OS settings > Custom settings in Fleet
- Upload the XML file (no editing required)
Fleet automatically replaces $FLEET_SECRET_OKTA_SCEP_URL, $FLEET_SECRET_OKTA_SCEP_CHALLENGE, and $FLEET_SECRET_OKTA_CA_THUMBPRINT when deploying. The certificate ID is automatically managed by Fleet using $FLEET_VAR_SCEP_WINDOWS_CERTIFICATE_ID.
Verify the certificate
Check the User cert store
Open PowerShell as the logged-in user (not administrator):
Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Subject -like "*managementAttestation*"}
Expected output:
Thumbprint Subject
---------- -------
A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0 CN=<SERIAL> managementAttestation
Check the device management logs
Get-WinEvent -LogName Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin -MaxEvents 50
Verify in Okta
- Log in to Okta Admin Console
- Navigate to Reports > System Log
- Filter for certificate issued events (
eventType eq "pki.cert.issue") - Confirm the certificates were issued successfully (The certificate
CNshould match the hosts serial number)
Troubleshooting
Exec returns 404
- Check that all three Fleet secrets exist (
OKTA_SCEP_URL,OKTA_SCEP_CHALLENGE,OKTA_CA_THUMBPRINT) - Verify the profile was uploaded correctly
- Review Device Management logs for details
Enrollment fails immediately
Check:
- ServerURL is correct
- CAThumbprint format (no colons or spaces)
- Device can reach the SCEP URL (network/firewall)
Challenge rejected
- Try a simpler plain text challenge (alphanumeric only)
- Avoid special characters, especially underscores
- If your challenge contains
! @ # $ % ^ & * ( ) _, rotate to a simpler value in Okta
Nothing in Cert:\LocalMachine\My
Note: Okta requires certificates in the User store (Cert:\CurrentUser\My), not the Device store.
Review Device Management logs:
Get-WinEvent -LogName Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin -MaxEvents 50
Automatic renewal
Include $FLEET_VAR_CERTIFICATE_RENEWAL_ID in the SubjectName OU of your SCEP profile to opt into auto-renewal. Fleet renews certificates about 30 days before expiration; new profiles deployed without this variable continue to work but must be renewed manually.
Example SubjectName containing the marker:
CN=$FLEET_VAR_HOST_HARDWARE_SERIAL managementAttestation,OU=$FLEET_VAR_CERTIFICATE_RENEWAL_ID
CA-side requirement: your SCEP CA must preserve the Subject OU in issued certificates. Verify by decoding an issued cert (openssl x509 -text) and confirming the OU contains fleet-<profile_uuid> after deployment.
Monitor expiration (optional safeguard)
If you'd like a manual safeguard alongside auto-renewal, use a Fleet policy to flag devices with certificates expiring soon:
SELECT 1
FROM certificates
WHERE
common_name LIKE '%managementAttestation%'
AND julianday(not_valid_after) - julianday('now') < 30;
The policy will:
- Fail: When a certificate exists and expires within 30 days
- Pass: When no certificate exists yet, or certificate is valid for more than 30 days
If you haven't opted into auto-renewal, redeploy the same configuration profile to trigger renewal manually.
Important notes
- Fleet secrets: Fleet does not hide secrets in profile results. Make sure all three secrets are created before deploying (
OKTA_SCEP_URL,OKTA_SCEP_CHALLENGE,OKTA_CA_THUMBPRINT). - User vs Device store: Okta requires certificates in the User store. The profile uses
./User/paths. If you use./Device, the device will not be marked as managed in Okta. - Certificate ID: Fleet automatically manages the certificate node name using
$FLEET_VAR_SCEP_WINDOWS_CERTIFICATE_ID- no manual configuration needed.