Setting Up a Microsoft CA for EAP-TLS Authentication
Setting Up a Microsoft CA for EAP-TLS Authentication
Tutorial | Windows Server 2022 | Audience: Junior IT Admins
Table of Contents
- Introduction
- Prerequisites
- Part 1 — Installing and Configuring Active Directory Certificate Services
(AD CS) - Part 2 —
ConfiguringCertificatethe CATemplates andCertificateGroupTemplatesPolicy - Part 3 — Deploying Device Certificates to Windows Devices
- Part 4 — Deploying Device Certificates to Apple Devices
- Part 5 — Deploying Device Certificates to Chromebooks
- Troubleshooting
- Next Steps
Introduction
By the end of this tutorial, you will have a working Microsoft Certificate Authority (CA) running on Windows Server 2022 that automatically issues device certificates to your Windows, Apple, and Chromebook devices. Those certificates will be used to authenticate devices to your Wi-Fi network using EAP-TLS.
Key concepts (plain English)
Before diving in, it helps to understand a few terms you will see throughout this tutorial:
Architecture overview
+-------------------------------+ issues certs +---------------------+
| Windows Server 2022 | -----------------------> | Windows Devices |
| | (Group Policy / AD) | |
| Roles installed: | -----------------------> | Apple Devices |
| - Certification Authority | (SCEP via NDES) | (via iMazing + MDM)|
| - NDES | | |
| - Online Responder | <-- Google Cloud Cert | Chromebooks |
| - Web Enrollment | Connector (SCEP) | (via GCC)GCCC) |
+-------------------------------+ +---------------------+
| |
| presents cert
| |
v v
+-------------------+ validates +---------------------+
| PacketFence | <-----------------------------| Wi-Fi Access Point |
| (RADIUS Server) | | (802.1X) |
+-------------------+ +---------------------+
When a device connects to your Wi-Fi network, it presents its certificate to the access point, which forwards it to PacketFence (your RADIUS server). PacketFence checks that the certificate was issued by your CA and, if so, grants the device access.
Prerequisites
Before you begin, make sure the following are in place.
Infrastructure
| Requirement | Details |
|---|---|
| Windows Server 2022 | A domain-joined server dedicated to the CA role. Do not install the CA on a Domain Controller. |
| Active Directory Domain Services (AD DS) | Your domain must already be set up and running. |
| PacketFence | Installed and reachable on your network. |
| Google Workspace (for Chromebooks) | Admin Console access with Chromebooks enrolled in your domain. |
| Google Cloud Platform (GCP) project | A GCP project with a configured billing account. Required for the Google Cloud Certificate Connector. |
| MDM solution (for Apple devices) | Such as Jamf, Mosyle, or Kandji. iMazing Profile Editor will be used to build the profile. |
Software to download
- iMazing Profile Editor — Free download from imazing.com/profile-editor
- Google Cloud Certificate Connector — Downloaded from the Google Admin Console during Part 5
Accounts and permissions
- A domain account that is a member of Enterprise Admins for the CA installation
- A dedicated NDES service account
for NDES(e.g.,svc-ndes) —acreatestandardthis before starting Part 1:- Standard domain user account
- Set
noPassword never expires - Check User cannot change password
- Do not grant any special permissions
toyetstart;— the wizard and IIS steps will configureitthem
with - Google Admin super-admin access for the Chromebook section
AOwner noteor Editor
access on NDES requires its own dedicated domain service account. Create this account in Active Directory before starting Part 1. Set the password to never expire and do not grant it any special permissions yet — the NDES configuration wizard will assign the permissions it needs.
A note on server sizing:The CA and NDES roles are not resource-intensive. 2 vCPUs and 4 GB RAM is sufficient for most environments. What matters most is that the server isreliable and well-backed-up. If you loseyourCAGCPwithoutproject
Part 1 — Installing and Configuring Active Directory Certificate Services (AD CS)
In this part, you will install theall four CA role and all supporting role services in a single pass, then configure each one pass:in sequence: the Certification Authority itself, NDES (which provides the SCEP endpoint for Apple and Chromebook devices), Online Responder (which handles certificate revocation checking), and Web Enrollment (whichused by PacketFence requires to communicate with your CA). You will then perform the post-installation IIS configuration that NDES requires to function correctly.
Step 1.1 — Add the AD CS role and all required role services
- Log in to your Windows Server 2022 machine with your Enterprise Admins account.
- Open Server Manager from the taskbar.
- Click Manage in the top-right corner, then select Add Roles and Features.
- Click Next until you reach the Server Roles page.
- Check the box next to Active Directory Certificate Services.
- A pop-up will ask you to add required features — click Add Features.
- Click Next until you reach the AD CS Role Services page.
- Check all four of the following role services:
- Certification Authority
- Network Device Enrollment Service (NDES)
- Online Responder
- Certification Authority Web Enrollment
- For each role service you check, Server Manager may prompt you to add additional required
features.features (including IIS components for NDES). Accept all of these by clicking Add Features each time. - Click Next, then Install.
- Wait for the installation to complete. Do not close Server Manager.
Step 1.2 — Configure the Certification Authority
Once the installation finishes, a yellow warning flag will appear in Server Manager.
- Click the flag, then click Configure Active Directory Certificate Services on the destination server.
- On the Credentials page, confirm the account shown is your Enterprise Admins account. Click Next.
- On the Role Services page,
you will see all four role services listed. Start by checkingcheck Certification Authorityonlyonly.— youYou will configure theotherremaining role services in subsequent steps within the same wizard. Click Next.
Choosing the CA type — this is important:type:
On the Setup Type page you will see two options:
- Enterprise CA — Integrated with Active Directory. This is what you want.
It enablesEnables automaticcertificateenrollment via Group Policy andallows the use ofcertificate templates. - Standalone CA — Not integrated with AD. Requires manual enrollment. Do not choose this.
Select Enterprise CA and click Next.
- On the CA Type page, select Root CA.
This is the first and only CA in your environment — it is the trust anchor for all certificates.Click Next. - On the Private Key page, select Create a new private key. Click Next.
- On the Cryptography page:
SetKeythe key length tolength: 4096 bitsLeaveHashthe hash algorithm asalgorithm: SHA256- Click Next
- On the CA Name page,
give your CAenter aclear,descriptive name,for examplee.g.,Contoso-Root-CA. Click Next. - On the Validity Period page, set
the validityto 10 years. Click Next. - Leave the database locations at their defaults. Click Next, then Configure.
Step 1.3 — Configure NDES
Continue in the same configuration wizard, now selecting Network Device Enrollment Service.
- On the Service Account for NDES page, enter the credentials for
theyoursvc-ndesserviceaccount you created in Prerequisites.account. Click Next. - On the CA for NDES page, select CA name and choose your newly created CA from the list. Click Next.
- On the RA Information page, fill in
theyour organization's Registration Authoritydetails. These appear in certificate requests that NDES submits on behalf of devices. Use your organization'sdetails:- RA Name: e.g.,
Contoso NDES RA - Fill in Country, State/Province, and Organization
as appropriate
- RA Name: e.g.,
- On the Cryptography for NDES page, leave both key lengths at 2048 and the hash algorithm
asat SHA-256. Click Next. - Click Configure to complete the NDES configuration.
Step 1.4 — Configure Online Responder
The Online Responder handles OCSP (Online Certificate Status Protocol) requests, allowing clients and PacketFence to quickly check whether a certificate has been revoked.
- In the wizard, select Online Responder.
- Accept the defaults on all pages and click Configure.
Step 1.5 — Configure Certification Authority Web Enrollment
Web Enrollment provides an HTTPS interface that PacketFence uses to request certificates.
- In the wizard, select Certification Authority Web Enrollment.
- Accept the defaults and click Configure.
- Click Close to exit the
wizard when all role services are configured.wizard.
Step 1.6 — Grant NDES service account CA-level permissions
NDES needs more than just template permissions — it also needs the right to issue and manage certificates on the CA itself. This is separate from the template permissions you will set in Part 2.
- Open the Certification Authority console.
- Right-click your CA and select Properties.
- Click the Security tab.
- Click Add and add your
svc-ndesaccount. - With
svc-ndesselected, check Allow for:- Issue and Manage Certificates
- Request Certificates
- Click OK.
Note: You can optionally remove Authenticated Users from this list to ensure only NDES and administrators can issue certificates on this CA. If you do this, make sure your Enterprise Admin account (or the Domain Admins group) retains Issue and Manage Certificates, Manage CA, and Request Certificates — otherwise you will lock yourself out of CA management.
Step 1.7 — Add the NDES service account to the local IIS_IUSRS group
IIS requires the NDES service account to be a member of the local IIS_IUSRS group for the SCEP application pool to run correctly.
- Open Server Manager → Tools → Computer Management.
- Expand Local Users and Groups → Groups.
- Double-click IIS_IUSRS.
- Click Add and add your
svc-ndesdomain account. - Click OK.
Step 1.8 — Configure the IIS SCEP application pool
- Open Internet Information Services (IIS) Manager.
- In the left panel, expand the server name and click Application Pools.
- Find the application pool named SCEP and double-click it.
- Set Managed pipeline mode to Integrated.
- Click OK.
Step 1.9 — Enable Load User Profile on the SCEP application pool
This step is required for the static SCEP challenge password to function correctly.
- Still in IIS Manager, right-click the SCEP application pool and select Advanced Settings.
- Scroll down to the Process Model section.
- Find Load User Profile and set it to True.
- Click OK.
Step 1.10 — Configure a static SCEP challenge password
By default, NDES generates a new, short-lived challenge password for every individual certificate request. For use with the Google Cloud Certificate Connector, a static challenge password is much easier to manage — it does not expire or rotate, and can be reused across all Chromebook enrollments.
- Open Registry Editor (
regedit.exe) on your CA server. - Navigate to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP - Find the UseSinglePassword value and double-click it.
- Set the value data to 1 (hexadecimal).
- Click OK.
What this does: Setting
UseSinglePasswordto 1 tells NDES to issue a single persistent challenge password, visible athttp://localhost/certsrv/mscep_admin/, rather than rotating per-request. This password can be used multiple times and does not expire.
Step 1.11 — Set NDES certificate templates in the registry
NDES uses three registry values under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP to determine which certificate template to use depending on the type of SCEP request it receives. Apple devices and Chromebooks send different request types, so they must be routed to different templates via different registry values.
| Registry value | Purpose | Set to |
|---|---|---|
GeneralPurposeTemplate |
Used by the Google Cloud Certificate Connector for Chromebook enrollments | Your Chrome template name |
EncryptionTemplate |
Used by Apple devices requesting an encryption key certificate | Your Apple template name |
SignatureTemplate |
Used by Apple devices requesting a signature key certificate | Your Apple template name |
- Still in Registry Editor, navigate to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP - Double-click GeneralPurposeTemplate and set the value data to the template name of your Chromebook template. You will create a template named
EAPTLSChromeDevicein Part 2 — enter that exact string here. - Double-click EncryptionTemplate and set the value data to the template name of your Apple template:
EAPTLSAppleDevice. - Double-click SignatureTemplate and set the value data to the same Apple template name:
EAPTLSAppleDevice.
When finished, the three values should look like this:
| Name | Type | Data |
|---|---|---|
GeneralPurposeTemplate |
REG_SZ | EAPTLSChromeDevice |
EncryptionTemplate |
REG_SZ | EAPTLSAppleDevice |
SignatureTemplate |
REG_SZ | EAPTLSAppleDevice |
Template name vs. display name: These are two different fields in the Certificate Templates console. The display name is what you see in the UI (e.g.,
EAP-TLS Chrome Device). The template name is a separate identifier with no spaces (e.g.,EAPTLSChromeDevice). When configuring NDES registry values and the Google Cloud Certificate Connector, always use the template name, not the display name. You will set both explicitly when creating templates in Part 2.
Step 1.12 — Disable Internet Explorer Enhanced Security Configuration
The mscep_admin challenge password page requires IE to function on the server. This is needed to retrieve the challenge password in Step 5.
- In Server Manager, click Local Server in the left panel.
- Find IE Enhanced Security Configuration in the Properties list.
- Click the current value (likely On) and set it to Off for both Administrators and Users.
- Click OK.
Step 1.13 — Restart the server
Restart your CA server now so that all IIS and registry changes take effect cleanly.
Step 1.14 — Verify all services are running
After the server restarts:
- Open the Certification Authority
console (search for it in the Start Menu).console. Your CA should appear with a green icon. - Open
Internet Information Services (IIS)IIS Manager.YouConfirmshouldtheseeSCEPtwoapplicationvirtualpooldirectories:isCertSrv(Web Enrollment)started and its identity is showing theCertSrv/mscepsvc-ndes(NDES).account. - From a browser on the server,
browsenavigate tohttp://localhost/certsrv/mscep_admin/. You should see a pagedisplayingwithana CA thumbprint and a static enrollment challenge password. This confirms NDES is running correctly.
If anythe servicechallenge showspassword aspage stopped,does right-clicknot itload, check: Is the SCEP app pool running? Is Load User Profile set to True? Is svc-ndes in the IIS_IUSRS group? Check Event Viewer under Applications and selectServices Start,Logs or→ restartMicrosoft the relevant→ Windows service→ fromNetworkDeviceEnrollmentService services.msc.for specific error messages.
Part 2 — ConfiguringCertificate the CATemplates and Group Policy
Certificate Templatestemplate overview
Each device platform uses a different enrollment method, which meansso each needs aits own certificate template configured differently. In this part you will create three separate templates — one for Windows devices, one for Apple devices, and one for Chromebooks.template:
| Template | Display Name | Template Name | Enrollment method | Subject name source |
|---|---|---|---|---|
| Windows | EAP-TLS Windows Device |
EAPTLSWindowsDevice |
Group Policy autoenrollment | Built from Active Directory |
| Apple | EAP-TLS Apple Device |
EAPTLSAppleDevice |
SCEP via NDES | Supplied |
| Chromebook | EAP-TLS Chrome Device |
EAPTLSChromeDevice |
SCEP via Google Cloud Certificate Connector | Supplied |
Important: The
keyTemplatedifferencenamebetween(nothespaces)Windowsistemplateused in registry settings, NDES configuration, and theSCEPGCCCtemplatesadapter_config.jsonfile. The Display name is what appears in theSubject Nametab. The Windows template can look up the machine name from Active Directory. SCEP-based templates cannot do this — the device tells theCAwhoconsoleitUI.isSetatboththedeliberatelytimewhenof the request, so the template must be configured to accept that information rather than look it up.
The Apple and Chrome templates are also kept separate fromcreating eachothertemplate.because they use different subject name variable syntax, and keeping them separate makes troubleshooting and auditing much cleaner.
Step 2.1 — Open the Certificate Templates console
In the Certification Authority console, right-click Certificate Templates and select Manage. This opens the Certificate Templates console in a separate window.
Template A — Windows Device Certificate
This template uses Active Directory autoenrollment and is scoped to the computer account.
In the Certificate Templates console, findFind the Computer template.- Right-click
itand select Duplicate Template.
Compatibility tab:
- Set both fields to Windows Server 2012 R2 / Windows 8.1 or higher (matching your environment)
General tab:
- Template display name:
EAP-TLS Windows Device - Template name:
EAPTLSWindowsDevice - Validity period:
1 year - Renewal period:
6 weeks - Check Publish certificate in Active Directory
Subject Name tab:
- Select Build from this Active Directory information
- Subject name format: Common name
- Under "Include this information in alternate subject name", check DNS name
Extensions tab:
- Click Application Policies
>→ Edit - Confirm Client Authentication is present
- Click OK
Security tab:
- Find Domain Computers
- Check Allow for both Enroll and Autoenroll
Click OK to save.
Template B — Apple Device Certificate
This template is used by Apple devices enrolling via SCEP. The subject name is supplied by the device at enrollment time, not looked up from AD.
In the Certificate Templates console, findFind the Computertemplatetemplate.again.- Right-click
itand select Duplicate Template.
General tab:
- Template display name:
EAP-TLS Apple Device Validity period:1 yearRenewal period:6 weeksLeavePublish certificate in Active Directoryunchecked — SCEP-enrolled devices are not AD objects
Subject Name tab:
SelectSupply in the requestYou will see a warning that the CA manager will need to approve each request. This is expected behaviour — for SCEP, NDES handles the approval automatically using the challenge password, so this does not result in manual approval queues.
Extensions tab:
ClickApplication Policies > EditConfirmClient Authenticationis presentClickOK
Security tab:
RemoveDomain Computersfrom the list (Apple devices are not domain members)Find or add thesvc-ndesservice accountGrantsvc-ndes:ReadandEnroll(check Allow for both)
Click OK to save.
Template C — Chrome Device Certificate
This template is nearly identical to the Apple template but is kept separate to use Google-specific subject name conventions and to keep issuance auditing clean.
In the Certificate Templates console, find theComputertemplate again.Right-click it and selectDuplicate Template.
General tab:
Template displayname:EAP-TLS Chrome DeviceEAPTLSAppleDevice- Validity period:
1 year - Renewal period:
6 weeks - Leave Publish certificate in Active Directory unchecked
Subject Name tab:
- Select Supply in the request
SameYoureasoningwillassee a warning about CA manager approval — this is expected. For SCEP, NDES handles approval via theApplechallengetemplatepassword— the Google Cloud Certificate Connector will supply the subject name based on the Chromebook's device serial number.automatically.
Extensions tab:
- Click Application Policies
>→ Edit - Confirm Client Authentication is present
- Click OK
Security tab:
- Remove Domain Computers from the list
- Find or add the
svc-ndesservice account - Grant
svc-ndes: Read and Enroll (check Allow for both)
Click OK to save.
Template C — Chrome Device Certificate
- Find the Computer template. Right-click and select Duplicate Template.
General tab:
- Template display name:
EAP-TLS Chrome Device - Template name:
EAPTLSChromeDevice(This exact string must match what you entered in the registry in Step 1.11 and what you will enter in the GCCCadapter_config.jsonin Part 5) - Validity period:
1 year - Renewal period:
6 weeks - Leave Publish certificate in Active Directory unchecked
Subject Name tab:
- Select Supply in the request
Extensions tab:
- Click Application Policies → Edit
- Confirm Client Authentication is present
- Click OK
Security tab:
- Remove Domain Computers from the list
- Find or add the
svc-ndesservice account - Grant
svc-ndes: Read and Enroll
Click OK to save.
Step 2.2 — Enable all three templates on your CA
Creating templates in the Certificate Templates console does not automatically make them available for issuance. You must add them to your CA.
- Return to the Certification Authority console.
- Right-click Certificate Templates and select New
>→ Certificate Template to Issue. - Select EAP-TLS Windows Device and click OK.
- Repeat
steps 2–3for EAP-TLS Apple Device. - Repeat
steps 2–3for EAP-TLS Chrome Device.
All three templates should now be listed under Certificate Templates in your CA.
Step 2.3 — Configure Windows computer auto-enrollment via Group Policy
Now you will tell all domain-joined Windows computers to automatically request a certificate using the Windows template.
- Open Group Policy Management (
rungpmc.msc). Right-clickand edit the Default Domain Policyand(orselecta dedicated GPO scoped to your computer accounts). All settings below are underEditComputer Configuration.
Note: For production
environments it is best practice to createenvironments, a dedicated GPOratheristhanpreferable to editing the Default Domain Policy. Forthe purposes ofthis tutorial,theeitherDefault Domain Policy is acceptable.works.
Stepit 5.3as — Install the connector
On your CA server, run the connector installer.Administrator.- Accept the default installation path.
When prompted, provide the path to theservice credentials JSON fileyou downloaded from Google Admin.Complete the installation.Theconnectorinstallerinstalls asregisters a Windows service named Google Cloud Certificate Connector.and sets it to run as LocalService by default.
The installation directory will contain: connector.exe, configtool.exe, and messagefile.dll. This is where you will place your JSON files in the next steps.
Step 5.4B.3 — ConfigurePlace the connector
service The installation directory will contain: connector.exe, configtool.exe, and messagefile.dll. This is where you will place your JSON files in the next steps.
Openaccount key in the connector'sinstallation configurationfolder
file.
Copy Bythe defaultkey.json itfile isyou locateddownloaded at:in Step 5.A.5 into the GCCC installation folder:
C:\Program Files\Google\Cloud Certificate Connector\config.json
Edit
Step 5.B.4 — Create the SCEP challenge file
The connector needs the static NDES challenge password stored in a text file in its installation directory.
- Open Notepad (or any plain text editor — not Word).
- Open an incognito browser window and navigate to
pointhttp://localhost/certsrv/mscep_admin/. Sign in assvc-ndesif prompted. - Copy the enrollment challenge password — no leading or trailing spaces.
- Paste it into Notepad. Confirm there is nothing else in the file.
- Save as
challenge-file.txtin the GCCC installation folder.
Step 5.B.5 — Create the adapter configuration file
The connector tois yourconfigured NDESvia endpoint:a JSON file named adapter_config.json placed in the installation folder. Create this file now.
- Open Notepad and create a new file.
- Paste the following JSON, replacing the placeholder values:
{
"scep_url"adapter_configuration": {
"request_subscriptions": [
"projects/<YOUR-GCP-PROJECT-ID>/subscriptions/<YOUR-SUBSCRIPTION-ID>"
],
"key_filename": "key.json"
},
"ca_configurations": [
{
"type": "SCEP",
"ca_connection_config_id": "<YOUR-CA-CONNECTION-CONFIG-ID>",
"ca_endpoint_url": "http://localhost/certsrv/mscep/mscep.dll",
"scep_challenge_url"challenge_filename": "http://localhost/certsrv/mscep_admin/",challenge-file.txt"
"signing_key_length":}
2048]
}
Replace:
<YOUR-GCP-PROJECT-ID>— your GCP project ID (found in the GCP Console dashboard)<YOUR-SUBSCRIPTION-ID>— the subscription name created with your Pub/Sub topic (e.g.,chrome-cert-enrollment-sub)<YOUR-CA-CONNECTION-CONFIG-ID>— a short identifier string you will choose; this must exactly match the Certificate Authority connection configuration identifier you enter in Google Admin Console in Phase C below. For example:contoso-ndes-scep
- Save as
adapter_config.jsonin the GCCC installation folder.
Note:Connector co-located with NDES: Since the connector is running on the same server as NDES,localhostis correcthere.for theca_endpoint_url. If you later move the connector to adifferentseparate server, replacelocalhostwith the FQDN of your CAserver'sserver,hostname.and ensure IIS is bound to HTTPS for that connection.
After
Step saving,5.B.6 restart— Start the connector service:service
- Open Services (
services.msc). - Find Google Cloud Certificate Connector.
- Right-click
>and selectRestartStart. - Confirm the service status shows Running.
Verify the connector is working by opening Event Viewer → Windows Logs → Application and filtering by source GoogleCloudCertificateConnector. You should see entries roughly every 30 seconds showing pull requests being sent to Pub/Sub. This confirms the connector is authenticated and listening for certificate requests.
Phase C — Configure Google Admin Console
Step 5.5C.1 — Create thea enrollmentCertificate profileAuthority in Google AdminConnection
ReturnSign in to Google Admin Console.- Navigate to Devices
>→ Networks. - Scroll down to Certificates and click Certificate Authority Connections.
- Click Add Connection.
- Select SCEP Certificate Authority connection and fill in:
- Certificate Authority connection name: A descriptive label (e.g.,
Contoso NDES CA) - GCP service account email: The email of the service account you created in Step 5.A.4 (format:
gccc-connector-sa@your-project-id.iam.gserviceaccount.com) - Pub/Sub topic: The full topic name from Step 5.A.2 (format:
projects/your-project-id/topics/chrome-cert-enrollment) - Certificate Authority connection configuration identifier: Enter the same identifier you used in
adapter_config.json(e.g.,contoso-ndes-scep)
- Certificate Authority connection name: A descriptive label (e.g.,
This identifier must match exactly — it is how Google Admin links its configuration to
createtheacorrectnewCAcertificateconfigurationenrollment profile.
- Click ADD.
Step 5.C.2 — Create a Certificate Provisioning Profile
- Go back to the Certificates page (Devices → Networks, scroll to Certificates).
- Select the Organizational Unit containing your managed Chromebooks (or stay at root to apply to all).
- Click Certificate provisioning profiles.
- Click Add Profile.
- Configure the profile:
Name:Certificate Authority connection: Select the connection you just created- Profile applies to: Device
- Profile name:
EAP-TLS Chrome Device Connector:Days before certificate expiration to initiate renewal:Select the connector you registered in Step 5.230CertificateAuthentication type:DeviceRemote attestation (recommended — this verifies the Chromebook is a legitimate managed device before issuing a certificate; choose None only if you need to support ChromeOS Flex or unmanaged devices)SCEPKeyprofile URL:usage:Check both Key encipherment and Signinghttp://your-ca-server/certsrv/mscep/mscep.dll- Subject name
format:— Common name:(CN=${DEVICE_SERIAL}DEVICE_SERIAL_NUMBER}This isGoogle's variable for the Chromebook's device serial number — notethethisdifferentusessyntax${DEVICE_SERIAL_NUMBER},from Apple'snot%SerialNumber%)as in the Apple profile) - Certificate
template:template name:(This must exactly match the template name — not display name — you created in PartEAP-TLS Chrome DeviceEAPTLSChromeDevice22) - Encryption
capitalizationkeyandtype:spacingRSAincluded)key - 2048 bit (ECC is generally preferred for performance, but RSA is required when using a static SCEP challenge password as configured here)
— UnderOrganizational Units, select the OUs containing your managed Chromebooks.- Click
SaveADD.
Google Admin will push the enrollment profile to managed Chromebooks at next policy refresh. You can also trigger an immediate sync from thea device's detail page in the Admin Console.
Step 5.6D — Verify on a Chromebook
- On a managed Chromebook, open a browser tab and
gonavigate to:chrome://settings/certificatescertificate-manager Click theUnderAuthoritiesCertificatestabbeingandprovisionedconfirmforyour CA's root certificate is listed as trusted.Click theYourthese certificatestab —, you should seeayourdeviceprofile listed (e.g.,EAP-TLS Chrome Device). Click the three-dot menu next to it to check enrollment status.- Refresh after 30 seconds — the certificate should appear under Your certificates with:
- Issued by your CA
- A Common Name matching the Chromebook's serial number
You can also confirm issuance from the CA side by opening Issued Certificates in the Certification Authority console and looking for entries showing the EAP-TLS Chrome Device template.
Troubleshooting
Certificate not appearing in the Windows computer certificate store
- Run
gpupdate /forcefollowed bycertutil -pulseon the affected device. - Confirm the device is domain-
joinedjoined:by runningrundsregcmd /statusandlookingcheck forDomainJoined: YES. - Check Certification Authority
>→ Failed Requests on your CA. The reason column will indicate why the request was rejected. - Confirm
thatDomain Computers has both Enroll and Autoenrollpermissionson theEAP-TLS Windows Devicetemplate. - Confirm the GPO is under
Computer Configuration, notUser Configuration. Rungpresult /ron the clientandverifycheck the GPO appears under Computer Settings>→ Applied GPOs.
Certificate not appearing on Apple devices
- Confirm the MDM profile was successfully delivered — check
thedevice status in your MDM console. - Verify the NDES SCEP URL is reachable from the device. Try browsing to it from Safari on the
device — you should receive a response, not a connection timeout.device. - Check that the
NDESchallenge password has notexpired.beenChallengereplaced.passwordsIfareyousingle-useregeneratedandthetime-limitedstatic(defaultpassword60onminutes).theGenerateserver,aupdatefreshtheoneprofilefrominyourhttp://your-ca-server/certsrv/mscep_admin/if needed.MDM. - Confirm
thesvc-ndesservice accounthas Read and Enrollpermissionson theEAP-TLS Apple Devicetemplate. - Check
the WindowsEventLog on your CA server:Viewer:Event Viewer >Applications and Services Logs>→ Microsoft>→ Windows>→ NetworkDeviceEnrollmentService
Certificate not appearing on Chromebooks
- Check
chrome://policyon the Chromebook and confirmRequiredClientCertificateForDeviceis present. If it is not, the device or user is not in the correct OU. - In Google Admin Console, go to Devices
>→ Chrome>→ Devices, find the affected device, and click Force Policy Sync. CheckConfirm the GoogleCloud Certificate Connector's Windows Event Log:Event Viewer > Applications and Services Logs > Google >Cloud Certificate Connector.Confirm the connectorservice is running on the CA server (services.msc).VerifyCheck the connector's event log: Event Viewer → Windows Logs → Application, filter by source GoogleCloudCertificateConnector. Every 30 seconds you should see pull request events. If you see OAuth errors, yourkey.jsonservice account credential has been invalidated — generate a new key and restart the service.- Confirm that
ca_connection_config_idinadapter_config.jsonexactly matches the Certificate Authority connection configuration identifier in Google Admin Console. - Confirm that
template_nameinadapter_config.json(or the Certificate template name in the Google Admin provisioning profile) exactly matches the template name (not display name) of theEAP-TLS Chrome Devicetemplate. - If the connector logs show
SCEP server returned failure: badRequest, the challenge password inchallenge-file.txtno longer matches what NDES isrunningserving.andRetrievethata fresh password fromhttp://localhost/certsrv/mscep_admin/returnsanda challenge password onupdate theCAfile,server.then Check thatrestart theCertificateconnectortemplatename in the Google Admin enrollment profile exactly matches the template name in your CA — capitalization and spacing must match.service.- Confirm
thesvc-ndesaccounthas Read and Enroll on theEAP-TLS Chrome Devicetemplate.template, and Issue and Manage Certificates + Request Certificates at the CA level.
EAP-TLS failing at authentication (device has a cert but cannot connect)
- Confirm the client certificate has Client Authentication
listedunder Extended Key Usage.Check this in the certificate's Details tab on the device. - Confirm PacketFence trusts your
CA.CAYour—CA'simport your CA root certificatemust be importedinto PacketFence's trusted CA store. - Check PacketFence's RADIUS logs for the
specificrejection reason. Commoncauses include:causes: certificate chain not trusted, certificate expired,orsubject nameformatnot matching what PacketFence expects. - Verify the device's clock is
accurate.accurateCertificate— certificate validation is time-sensitive — a significantly wrong clock will cause validation to fail.sensitive.
NDES challenge password page is inaccessible
- Confirm
thesvc-ndesservice accountisset astheapplication pool identityIdentity for theNDESSCEPappapplication pool in IIS Manager. - Confirm IIS is running
— openIIS Managerandcheck thatthe Default Web Site is started. - Confirm
thatLoad User Profile is set to True on the SCEP app pool (Step 1.9). - Confirm
svc-ndesis in the local IIS_IUSRS group (Step 1.7). - Confirm
svc-ndeshasReadIssue and Manage Certificates andEnrollRequest Certificatespermissionson the CAitselfSecurity tab (notStepjust the templates). In the Certification Authority console, right-click your CA >Properties > Security1.6).
Next Steps
You now have a functioning Microsoft CA issuing device certificates to Windows, Apple, and Chromebook devices. The next step is to configure PacketFence to use your CA as the trust anchor for EAP-TLS authentication and to connect it to your Wi-Fi infrastructure via 802.1X.
Specifically, you will need to:
- Import your CA root certificate into PacketFence so it can validate device certificates during EAP-TLS handshakes.
- Issue a RADIUS server certificate from your CA for PacketFence itself, so that devices can also validate the RADIUS server's identity — mutual authentication is a core requirement of EAP-TLS.
- Configure your wireless access points to point to PacketFence as their 802.1X RADIUS server.
These steps are covered in the PacketFence documentation. The certificate infrastructure you have built in this tutorial is the foundation that all of those steps depend on.