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.
Rachael Shaw
Rachael Shaw
With Fleet, you can integrate with Okta to enforce conditional access on macOS hosts.
When a host fails a policy in Fleet, IT and Security teams can block access to third-party apps until the issue is resolved.
Conditional access with Okta requires an mTLS reverse proxy on a separate subdomain (e.g., okta.fleet.example.com). All other Fleet traffic continues to use your existing Fleet server URL.
If your Fleet server is hosted by Fleet, contact your Fleet representative to set up the mTLS infrastructure for you.
If you would like to set up a testing environment, see the Okta conditional access testing guide.
If you use fleet-terraform modules for AWS hosting, see the okta-conditional-access addon for streamlined mTLS proxy setup.
Otherwise, you'll need to:
/api/fleet/conditional_access/scep?operation=GetCACert. This is the certificate that signs the client certificates deployed to your hosts.Note: The certificate is provided in DER format. If your mTLS termination solution requires PEM format, you can convert it using the following command:
openssl x509 -inform der -in fleet-scep-ca.cer -out fleet-scep-ca.pem
Replace fleet-scep-ca.crt with the filename you used when downloading the certificate.
Create a DNS record: Set up a subdomain with an okta prefix pointing to your mTLS proxy server (e.g., okta.fleet.example.com).
Configure an mTLS reverse proxy: Set up a reverse proxy that:
X-Client-Cert-Serial header to your Fleet backendRedirect the SSO endpoint: Configure your main Fleet server to redirect /api/fleet/conditional_access/idp/sso to the mTLS proxy (e.g., https://okta.fleet.example.com/api/fleet/conditional_access/idp/sso). This ensures all authentication requests go through mTLS verification.
Here's an example Caddyfile for setting up the mTLS proxy:
okta.fleet.example.com {
# Enable TLS with mTLS (client certificate authentication)
tls {
client_auth {
mode require_and_verify
trusted_ca_cert_file /etc/caddy/fleet-scep-ca.crt
}
}
# Reverse proxy to your Fleet server
reverse_proxy https://fleet.example.com {
# Forward client certificate serial number to Fleet
header_up X-Client-Cert-Serial {http.request.tls.client.serial}
}
}Important: Caddy sends the certificate serial number in decimal format, while AWS ALB sends it in hexadecimal format. When using Caddy, you must configure Fleet to parse the serial number in decimal format by setting
conditional_access.cert_serial_formattodecimal.
Replace:
okta.fleet.example.com with your mTLS subdomain/etc/caddy/fleet-scep-ca.crt with the path to your SCEP CA certificatehttps://fleet.example.com with your Fleet server URL.mobileconfig file and save.fleet.example.com with your Fleet server domain):https://fleet.example.com/api/fleet/conditional_access/idp/metadatahttps://okta.fleet.example.com/api/fleet/conditional_access/idp/sso (note the okta. prefix)https://okta.fleet.example.com/api/fleet/conditional_access/idp/sso (note the okta. prefix)Once you've created the identity provider in Okta, click on the Fleet identity provider to view its settings. You'll need to copy these values into Fleet.
Create an authentication policy rule that requires Fleet verification for macOS hosts:
To apply this policy to specific apps, go to Applications > select an app > Sign On tab > Authentication policy and assign the policy.
Once Okta is configured in settings, head to Policies. Select the team that you want to enable conditional access for.
Once enabled, if a user tries to log in to an app that requires Fleet as a factor and their host is failing a selected policy, they will be blocked from logging in. To regain access, the user must fix the issue on their host and then click Refetch on the My device page to verify the policy is now passing.
Warning: You must disable conditional access on the Okta side first. If you only disable it on the Fleet side, users may be unable to log in to apps that still require Fleet as an authentication factor.
To disable conditional access on the Okta side:
Once disabled on the Okta side, you can delete the conditional access configuration on Fleet's side from Settings > Integrations > Conditional access > Okta and clicking the delete button.
End users can temporarily bypass conditional access from their My device page if their host is failing a policy. To trigger a bypass, click a failing policy labeled Action required, select Resolve later, and confirm in the following modal. The bypass allows the user to complete a single login even with failing policies and is consumed immediately upon successful login.
This feature is enabled by default, but can be disabled by checking the Disable bypass checkbox in Settings > Integrations > Conditional access.