Solutions
Device management
Remotely manage, and protect laptops and mobile devices.
Orchestration
Automate tasks across devices, from app installs to scripts.
Software management
Inventory, patch, and manage installed software.
Infrastructure as code
See every change, undo any error, repeat every success.
Extend Fleet
Integrate your favorite tools with Fleet.
More
Device management
Remotely manage, and protect laptops and mobile devices.
Orchestration
Automate tasks across devices, from app installs to scripts.
Software management
Inventory, patch, and manage installed software.
Infrastructure as code
See every change, undo any error, repeat every success.
Extend Fleet
Integrate your favorite tools with Fleet.
Adam Baali
Adam Baali
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.
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.
Collect from your Okta tenant:
Download your Okta CA certificate and extract the SHA-256 thumbprint.
macOS/Linux:
openssl x509 -in ~/Downloads/ca.cer -noout -fingerprint -sha256Windows:
certutil -hashfile ca.cer SHA256Output will look like:
SHA256 Fingerprint=E2:18:D7:A7:B0:DF:ED:79:B2:05:73:BA:79:CB:14:B1:FE:EA:D2:7BRemove the colons:
E218D7A7B0DFED79B20573BA79CB14B1FEEAD27B! @ # $ % ^ & * ( ) _, rotate to a simpler valueFollow 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) |
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.
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> managementAttestationGet-WinEvent -LogName Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin -MaxEvents 50OKTA_SCEP_URL, OKTA_SCEP_CHALLENGE, OKTA_CA_THUMBPRINT)Check:
! @ # $ % ^ & * ( ) _, rotate to a simpler value in OktaNote: 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 50Use a Fleet policy to identify devices with certificates expiring within 30 days:
SELECT 1
FROM certificates
WHERE
common_name LIKE '%managementAttestation%'
AND julianday(not_valid_after) - julianday('now') < 30;This policy will:
To renew certificates, you can:
Manual redeployment: Redeploy the same configuration profile to trigger renewal
OKTA_SCEP_URL, OKTA_SCEP_CHALLENGE, OKTA_CA_THUMBPRINT)../User/ paths. If you use ./Device, the device will not be marked as managed in Okta.$FLEET_VAR_SCEP_WINDOWS_CERTIFICATE_ID - no manual configuration needed.