Certificate-Based Wi-Fi Auth with Okta Device Trust and Meraki

Overview

Okta Device Trust issues a certificate to enrolled devices to prove they’re managed by your MDM. That same certificate can authenticate the device to a Meraki wireless network over 802.1X, giving you certificate-based Wi-Fi with no RADIUS server to stand up and no per-device licensing to buy.

This walkthrough covers pulling the Okta certificate chain, configuring a Meraki SSID for Enterprise with Local Auth, and then building the client-side profile that ties them together in Jamf for macOS, or Intune for Windows. The Meraki configuration is the same either way, so pick whichever MDM section applies to you.

Prerequisites

  • Okta Identity Engine with Device Trust configured per Okta’s documentation
  • Jamf Pro with access to Configuration Profiles (macOS), or Microsoft Intune with Okta Device Trust configured (Windows)
  • Meraki MR access points
  • Admin access to all three consoles

How It Works

When a Mac enrolls in Jamf and Device Trust is active, Okta provisions a certificate to the device over SCEP. Meraki’s local authentication validates that certificate against the Okta intermediate CA you upload to the dashboard using an internal RADIUS server, no external RADIUS backend involved. On the client side, the Jamf profile pins the Meraki RADIUS server’s certificate common name, so the Mac only trusts the intended authentication server.


Part 1: Getting the Certificates

You need three certificates: the Okta intermediate, the Okta root, and the IdenTrust Commercial Root CA that anchors Okta’s chain.

The Okta Intermediate Certificate

Navigate to your Okta Admin Console: https://<your-org>-admin.okta.com/admin/access/device-management#certificateAuthority

You’ll find the Okta CA listed under the Certificate authority tab, marked (For endpoint management), with its status and expiration date. Use the download action on the right to save it.

Okta Admin Console Device Integrations page, Certificate authority tab, showing the Okta CA with Active status and expiration date

Save it as company-okta-intermediate.cer. Note that despite the label, this is the intermediate CA, not the root.

The Okta Root Certificate

Hit the Okta API in your browser: https://<your-org>-admin.okta.com/api/v1/certificateAuthorities?type=ROOT

Look at the _links.cert.href value in the response, that’s the direct download link for the root certificate.

Okta certificate authorities API response in a browser, showing the root certificate download link

Open that URL and save the result as company-okta-root.cer.

The IdenTrust Commercial Root CA

Download the bundle from IdenTrust:

https://www.identrust.com/sites/default/files/resources/IdenTrustCommercialRootCA_0.p7b

It arrives as PKCS#7, so convert it for Jamf Pro:

openssl pkcs7 -inform DER -print_certs \
-in ~/Downloads/IdenTrustCommercialRootCA_0.p7b \
-out ~/Downloads/IdenTrust-Commercial-Root-CA.cer

Part 2: Configuring Meraki Local Authentication

Enable Enterprise with Local Auth

Create or select your SSID, then go to its Access Control page and set Security to Enterprise withLocal Auth.

Configure it as follows:

  • Certificate authentication: Enabled
  • Password authentication: Disabled
  • Cache timeout: 86400 seconds
  • LDAP verification: Do not verify certificate with LDAP
  • OCSP verification: Do not verify certificate with OCSP
  • Client Certificate CA: upload company-okta-intermediate.cer
Meraki Access Control page set to Enterprise with Local Auth, certificate authentication enabled and password authentication disabled

Copy the RADIUS Client Trust Values

Copy the Current organization value in the RADIUS Client Trust settings section. Save this for later, you’ll paste it into Jamf as the trusted server certificate name. Using the organization value rather than the network value means the profile keeps working if you add the SSID to other networks in the same org.

Set WPA3

Still on the same page, set WPA encryption to WPA3 only. Related settings:

  • 802.11r: Enabled
  • 802.11w: Required (reject unsupported clients)
Meraki WPA encryption set to WPA3 only with 802.11r enabled and 802.11w required

WPA3 is not optional if you want 6 GHz. Wi-Fi 6E and Wi-Fi 7 access points will not bring up a 6 GHz radio on an SSID that permits WPA2. If you’re running WPA2/WPA3 mixed mode, you’re not using the 6 GHz band.


Part 3: Configure Jamf

Open Computers › Configuration Profiles and edit your existing Okta Device Trust profile.

Add the Certificate Payloads

Add three Certificate payloads, one per certificate:

Certificate NameFileNotes
Okta Intermediate Certcompany-okta-intermediate.cerAllow all apps access
Okta Root Certcompany-okta-root.cerAllow all apps access
IdenTrustCommercialRootCAIdenTrust-Commercial-Root-CA.cerAllow all apps access
Jamf certificate payloads for the Okta intermediate and Okta root certificates, showing issuer names and expiration dates

The sidebar should now read Certificate — Payloads configured: 3.

Add the Network Payload

Add a Network payload:

  • Network Interface: Wi-Fi
  • SSID: your Meraki SSID (e.g. Company Secure)
  • Hidden Network: unchecked
  • Auto Join: checked
  • Disable MAC Address Randomization (macOS 15+): checked
  • Proxy Setup: None
  • Security Type: WPA3 Enterprise
Jamf Network payload with Wi-Fi interface, SSID, Auto Join, disabled MAC randomization, and WPA3 Enterprise security type

A note on MAC randomization: disabling it makes the client’s MAC stable, which keeps Meraki client history, group policies, and per-client troubleshooting coherent across reconnects. macOS will show a reduced-privacy warning for the network in Settings, which is expected.

Network Security → Protocols

Under Network Security Settings, on the Protocols tab:

  • Accepted EAP Types: TLS only
Jamf Network Security Protocols tab with only TLS checked under accepted EAP types

Network Security → Trust

Switch to the Trust tab:

  • Username: $USERNAME
  • TLS Minimum Version: 1.2
  • TLS Maximum Version: 1.2
  • Identity Certificate: SCEP (Okta): this points at the SCEP payload already in this profile used for Okta Trust.
  • Trusted Certificates: check IdenTrustCommercialRootCA
  • Trusted Server Certificate Names: add the Current organization value you copied from Meraki (*.<org-id>.radius.meraki.direct)
  • Allow Trust Exceptions: unchecked
Jamf Trust tab showing the SCEP identity certificate, IdenTrust Commercial Root CA checked, and the pinned Meraki server certificate name

Leaving Allow Trust Exceptions unchecked is deliberate. With it enabled, a user could be prompted to accept an unexpected server certificate and click through it, which defeats the point of pinning the name in the first place.

Save the profile and scope it to a pilot group.


Part 4: Configure Intune

Before any of this, get Device Trust working in Intune first. Okta’s documentation covers the whole setup, including the SCEP connector and the certificate profile that issues the client identity certificate:

Once Device Trust is live and devices are receiving their SCEP certificate from Okta, pick up here.

What You’re Deploying

Four profiles, all under Devices › Configuration:

ProfileTypeCertificateStore
Company Okta Root CertificateTrusted certificatecompany-okta-root.cerRoot
Company Okta Intermediate CertTrusted certificatecompany-okta-intermediate.cerIntermediate
Meraki Local Auth Root CertificateTrusted certificateIdenTrust-Commercial-Root-CA.cerRoot
Company Wi-FiWi-Fi

The first two establish the chain for the client’s own identity certificate. The third is what the client uses to validate the Meraki RADIUS server, it’s the IdenTrust root you converted in Part 1, named here for the job it does rather than for its issuer.

Deploy the Okta Root Certificate

Go to Devices › Configuration › Create › New Policy. Set Platform to Windows 10 and later and Profile type to Templates, then search the template list for trusted and pick Trusted certificate.

Intune Create a profile blade with Windows 10 and later, Templates, and the Trusted certificate template selected

On Basics, name it something you’ll recognize in a list of thirty policies, Company Okta Root Certificate works.

Basics tab of the Intune trusted certificate profile with the Okta root certificate name entered

On Configuration settings, upload company-okta-root.cer and set Destination store to Computer certificate store – Root.

On Assignments, use Add all users. Skip Applicability Rules entirely, there’s nothing to scope here, since the certificate is harmless on any Windows device.

Assignments tab of an Intune configuration profile with All users added to included groups

Review and create.

Review and create summary for the Okta root certificate profile, destination store set to Root

Deploy the Okta Intermediate Certificate

Same flow, one setting different. Create another Trusted certificate profile, name it Company Okta Intermediate Cert, upload company-okta-intermediate.cer, and set Destination store to Computer certificate store – Intermediate.

This is the easy one to get wrong. An intermediate CA dropped into the Root store will often appear to work and Windows will chain through it, but you’ve just told the machine to trust that CA as a root, which is not what you meant. Put it in Intermediate.

Assign to all users, review, create.

Deploy the IdenTrust Root for Server Validation

One more Trusted certificate profile. Name it for its purpose: Meraki Local Auth Root Certificate and upload IdenTrust-Commercial-Root-CA.cer, and set Destination store to Computer certificate store – Root.

Assign to all users, review, create.

Build the Wi-Fi Profile

Create one more profile: Windows 10 and laterTemplatesWi-Fi. Name it Company Wi-Fi.

Basics tab of the Intune Wi-Fi configuration profile

On Configuration settings:

SettingValue
Wi-Fi typeEnterprise
Wi-Fi name (SSID)your Meraki SSID
Connection namesame as SSID
Connect automatically when in rangeYes
Connect to more preferred network if availableNo
Connect to this network, even when it is not broadcasting its SSIDNo
Metered Connection LimitUnrestricted
Authentication ModeUser
Remember credentials at each logonEnable
Authentication period / retry delay / start period / EAPOL-startNot configured
Wi-Fi profile settings showing Enterprise type, SSID, connection behavior, and User authentication mode

Scroll to Fast roaming settings:

SettingValue
Enable pairwise master key (PMK) cachingYes
Maximum time a PMK is stored in cache840
Maximum number of PMKs stored in cache10
Enable pre-authenticationYes
Maximum pre-authentication attempts2

PMK caching is what keeps a full TLS handshake from firing on every roam between access points. On a certificate-based network the handshake is more expensive than PSK, so this matters more here than it would on a passphrase SSID.

Then under Extensible Authentication Protocol (EAP), set EAP type to EAP – TLS.

Fast roaming settings with PMK caching enabled and EAP type set to EAP-TLS

Server Trust and Client Authentication

This is the part that mirrors the Jamf Trust tab, and it’s where the Meraki values you copied in Part 2 come in.

Under Server Trust:

  • Certificate server names: paste the Current organization value from the Meraki RADIUS Client Trust settings: *.<org-id>.radius.meraki.direct
  • Root certificates for server validation: click Select one or more certificate profiles and pick the Meraki Local Auth Root Certificate profile you created above

Under Client Authentication:

  • Authentication method: SCEP certificate
  • Client certificate for client authentication (Identity certificate): select your Okta SCEP certificate profile
  • Company proxy settings: None
  • Force Wi-Fi profile to be compliant with FIPS: No
Certificate server names, root certificate for server validation, and SCEP identity certificate selection

Two things worth calling out. First, the Certificate server names field is the pin and without it, the client will accept any server presenting a certificate that chains to IdenTrust, which is a very large set of servers. Use the organization-scoped value, not the network-scoped one, for the same reason as in the Jamf profile.

Second, Authentication Mode: User combined with a SCEP identity certificate means the client presents the user’s certificate. If your Device Trust setup issues a device certificate instead, set Authentication Mode to Machine and point the identity certificate at the corresponding profile, otherwise the client will have nothing to present at logon.

Assign to all users, review, and create.

Review and create summary for the Intune Wi-Fi profile

Verifying on Windows

On a target machine, run certlm.msc and confirm all three certificates landed in the right stores: the Okta root and IdenTrust root under Trusted Root Certification Authorities, and the Okta intermediate under Intermediate Certification Authorities. Then check that the Okta SCEP client certificate is present under Personal.

If the client certificate is missing, the problem is upstream in Device Trust, not in anything above.

Once the certificates are in place, the SSID should appear and connect without a credential prompt. From an elevated prompt, netsh wlan show interfaces will confirm the authentication method in use.


Troubleshooting

Client won’t associate at all. Check that the profile actually installed, and that all three certificate payloads are present. A missing root in the chain is the most common cause.

Client associates, then immediately drops. Usually a name mismatch. Compare the Trusted Server Certificate Name in Jamf against the Meraki Current organization value character for character and it’s easy to grab the network value instead of the org value.

“Could not authenticate” with no useful detail. Verify the Identity Certificate in the Network payload is set to the SCEP (Okta) payload and not left at None. Also confirm the device actually received its SCEP certificate from Okta; if Device Trust never provisioned, there’s no client identity to present.

Certificate expired. Note the expiration dates when you upload certs, Okta’s intermediate and root have different lifespans, and the IdenTrust root has its own. Put the earliest one in your calendar.


Why This Approach

The usual path to certificate-based Wi-Fi is a RADIUS server: either self-hosted NPS/FreeRADIUS with the operational burden that implies, or a cloud RADIUS service with per-device pricing. This setup uses infrastructure you already pay for: Okta issues the certificates, Jamf delivers them, and Meraki validates them locally on the access point. No new servers, no new licenses, and no shared PSK sitting in a password manager waiting to leak.

Leave a comment