Identity / Certificate Lifecycle ยท Modern Endpoint Guides
๐Ÿ” Microsoft Intune

PKI & Certificate Management

Enterprise certificate delivery via SCEP and PKCS โ€” from Certificate Connector setup to Wi-Fi, VPN, and email authentication across all managed platforms.

๐Ÿ“… Updated: May 2026 โฑ๏ธ Implementation: ~4โ€“8 hours ๐ŸŽฏ Audience: PKI Engineers, Intune Admins ๐Ÿ“‹ License: P1 / P2

๐Ÿ“‹ Overview & Licensing

Intune delivers certificates to managed devices via two mechanisms: SCEP (Simple Certificate Enrollment Protocol) and PKCS (PFX). Each requires a Certificate Connector and an on-premises CA (ADCS or third-party).

๐ŸŽฏ Core Capabilities

  • Automated certificate provisioning to all platforms
  • Device and user certificate delivery
  • Wi-Fi, VPN, and email client authentication
  • S/MIME encryption and signing
  • Automatic renewal before expiry
  • Certificate revocation on device wipe/retire

๐Ÿ“‹ Licensing Requirements

FeatureLicense
SCEP ProfilesIntune P1
PKCS ProfilesIntune P1
S/MIME (user cert)P1 + Exchange
Third-party CAP1 + CA API

SCEP vs. PKCS โ€“ Comparison

Attribute SCEP PKCS #12 (PFX)
Private key locationGenerated on device (never leaves)Generated on server, delivered encrypted
Security postureHigher (non-exportable key)Lower (PFX can be extracted)
CA requirementADCS with NDES roleADCS (direct PFX)
Supported platformsWindows, iOS, Android, macOSWindows, iOS, Android, macOS
Use for Wi-Fi/VPNโœ… Preferredโœ… Supported
Use for S/MIMELimitedโœ… Preferred (exportable)

๐Ÿ—๏ธ PKI Architecture

๐Ÿ“ End-to-End Certificate Flow

Intune Policy
โ†’
Device
โ†’
SCEP/PKCS Profile
โ†’
Certificate Connector
โ†’
NDES / CA
โ†’
Certificate Issued

๐Ÿข ADCS (NDES) Architecture

  • Root CA: Offline, air-gapped for maximum security
  • Issuing CA: Online, member of domain
  • NDES server: Separate from CA (IIS + SCEP module)
  • Certificate Connector: Installed on NDES server
  • Service Account: Domain account with specific permissions

โ˜๏ธ Third-Party CA Support

  • DigiCert, Entrust, GlobalSign via API
  • Connector communicates with CA REST API
  • No NDES required for cloud CAs
  • Custom subject name support
  • PKCS flows only (not SCEP for third-party)

๐Ÿ”’ Certificate Authority Hierarchy

TierRoleRecommendation
Root CATrust anchor, signs Issuing CAOffline, HSM, 4096-bit RSA or P-384 ECDSA
Issuing CAIssues end-entity certificatesOnline, 2-year cert lifetime, CDP/AIA published
NDESSCEP endpoint for devicesDedicated server, load balanced for scale
ConnectorIntune โ†” CA bridgeInstalled on NDES, outbound HTTPS only

๐Ÿ”Œ Certificate Connector

The Certificate Connector replaced the older Microsoft Intune Certificate Connector. Use the new unified connector from the Intune portal โ€“ it supports both SCEP and PKCS in a single agent.
1

Download Connector

Go to Intune admin center โ†’ Tenant administration โ†’ Connectors and tokens โ†’ Certificate connectors โ†’ Download the connector installer.

2

Install on NDES Server

Run the installer as local administrator. Select SCEP and/or PKCS as needed. The connector runs as a Windows service.

3

Authenticate to Intune

Sign in with a Global Admin or Intune Admin account when prompted. This creates a trust relationship between the connector and your Intune tenant.

4

Verify Status

In the Intune portal, the connector should show Active within 5 minutes. Check Windows Event Log: Applications and Services Logs โ†’ Microsoft โ†’ Intune โ†’ Certificate Connector.

โš™๏ธ Service Account Permissions

  • Domain user account (not local account)
  • Enroll permission on the certificate template
  • Read and Enroll on the NDES template
  • Log on as a service right on the NDES server
  • Member of IIS_IUSRS local group on NDES

๐ŸŒ Network Requirements

DirectionEndpointPort
Outbound*.manage.microsoft.com443/HTTPS
Outbound*.microsoftonline.com443/HTTPS
Outbound*.azure.com443/HTTPS
InternalNDES โ†’ Issuing CA135/RPC, 49152+

โ™ป๏ธ High Availability Setup

  • Install multiple connectors on different NDES servers
  • Intune load balances automatically across active connectors
  • Each connector must be registered separately in Intune
  • Use NLB or Azure Load Balancer for NDES SCEP URL
  • Minimum 2 connectors recommended for production
Connectors do NOT need to be on the same server. You can have multiple NDES servers each with a connector, and Intune will distribute requests automatically.

โš™๏ธ SCEP Certificate Profiles

๐Ÿ“ Certificate Template Settings

  • Template name: Must match ADCS template exactly
  • Certificate type: Device or User
  • Subject name format: CN={{DeviceName}} or CN={{AAD_Device_ID}}
  • SAN: DNS={{DeviceName}}, UPN={{UserPrincipalName}}
  • Certificate validity: 1โ€“2 years typical
  • Key storage provider: TPM preferred

๐Ÿ”‘ Key Usage Options

  • Digital Signature: Client authentication
  • Key Encipherment: Data encryption
  • Extended Key Usage: Client Auth OID (1.3.6.1.5.5.7.3.2)
  • Key size: 2048 or 4096 bits
  • Hash algorithm: SHA-256 minimum

๐Ÿท๏ธ Dynamic Subject Name Variables

VariableValueUse Case
{{DeviceName}}Device hostnameDevice certs, Wi-Fi, VPN
{{AAD_Device_ID}}Azure AD Device Object IDConditional Access device identity
{{UserPrincipalName}}user@domain.comUser certs, email auth
{{serialNumber}}Device serial numberHardware-bound identity
{{IMEI}}Mobile IMEIMobile device identity
{{OnPrem_Distinguished_Name}}AD DNHybrid join scenarios
# SCEP Profile via Graph API
POST https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations

{
  "@odata.type": "#microsoft.graph.windows10CertificateProfileBase",
  "displayName": "SCEP - Wi-Fi Client Auth - Windows",
  "certificationAuthority": "ca.corp.contoso.com",
  "certificationAuthorityName": "Contoso Issuing CA",
  "certificateTemplateName": "IntuneWiFiClient",
  "subjectNameFormat": "CN={{DeviceName}}",
  "subjectAlternativeNameType": "dnsName",
  "keyUsage": "digitalSignature",
  "extendedKeyUsages": [{ "objectIdentifier": "1.3.6.1.5.5.7.3.2", "name": "Client Authentication" }],
  "scepServerUrls": ["https://ndes.corp.contoso.com/certsrv/mscep/mscep.dll"],
  "validityPeriodValue": 1,
  "validityPeriodScale": "years",
  "renewalThresholdPercentage": 20
}

๐Ÿ“œ PKCS Certificate Profiles

๐Ÿ“ฆ PKCS Profile Settings

  • Certificate Authority: FQDN of Issuing CA
  • CA Name: Common Name of the CA
  • Template: Certificate template name in ADCS
  • Subject name format: Same variables as SCEP
  • Renewal threshold: 20โ€“30% before expiry
  • Key storage: Software KSP or TPM

๐Ÿ”„ PKCS Imported Certificates

  • Pre-existing PFX files imported to Intune
  • Used for S/MIME (same cert across devices)
  • Upload via PowerShell or Graph API
  • Delivered encrypted per-device
  • Requires separate PKCS Imported profile type
# PowerShell: Upload PKCS Imported PFX for S/MIME
Import-Module Microsoft.Graph.DeviceManagement

# Read PFX file and encode
$pfxData = [System.IO.File]::ReadAllBytes("C:\certs\user_smime.pfx")
$pfxBase64 = [Convert]::ToBase64String($pfxData)

# Create the imported certificate
$body = @{
    userPrincipalName = "alice@contoso.com"
    password          = "PfxPassword123!"
    pkcs12Value       = $pfxBase64
    intendedPurpose   = "smimeEncryption"
}

New-MgDeviceManagementUserPfxCertificate -BodyParameter $body

โœ… Trusted Root Certificate Profiles

Always deploy Trusted Root profiles BEFORE SCEP or PKCS profiles. Certificates will fail to validate if the root CA is not yet trusted on the device.

๐ŸŒณ Root CA Deployment

1

Export Root CA Certificate

Export Root CA cert as .cer (DER encoded) from Certification Authority MMC.

2

Create Trusted Certificate Profile

Intune โ†’ Device Configuration โ†’ Create Profile โ†’ Trusted certificate โ†’ Upload .cer file.

3

Assign to All Devices Group

Assign broadly to All Devices or all targeted device groups before SCEP/PKCS profiles.

๐Ÿข Intermediate CA Deployment

  • Also deploy Intermediate/Issuing CA certificate
  • Separate Trusted Certificate profile per CA
  • Destination store: Computer (for device certs), User (for user certs)
  • Include full chain if third-party CA is used
Deploy chain: Root CA โ†’ Intermediate CA โ†’ then SCEP/PKCS profile

๐Ÿ“ก Wi-Fi & VPN Authentication

๐Ÿ“ก 802.1X Wi-Fi Profile

  • EAP Type: EAP-TLS (certificate-based)
  • Authentication method: Certificate
  • Client certificate: Reference SCEP profile
  • Server validation: Root CA certificate
  • Identity Privacy: anonymous@domain.com

๐Ÿ”— Profile Dependency Chain

1. Trusted Root Profile โ†’ Device
2. SCEP Profile โ†’ Device (ref. root)
3. Wi-Fi Profile โ†’ Device (ref. SCEP cert)

๐Ÿ›ก๏ธ VPN Certificate Auth

  • Supported: Always On VPN, Cisco AnyConnect, Pulse Secure
  • Certificate EKU must include Server Authentication on VPN gateway
  • Client cert delivered via SCEP or PKCS
  • Use device certificate for machine tunnels
  • Use user certificate for user tunnels

๐Ÿ”’ Always On VPN Config

  • Device Tunnel: System certificate (device cert)
  • User Tunnel: User certificate (user cert)
  • Both tunnels can use certificate auth simultaneously
  • Requires Windows 10 1709+ or Windows 11

โœ‰๏ธ Email & S/MIME

๐Ÿ” S/MIME Configuration

  • Signing cert: PKCS Imported or SCEP user cert
  • Encryption cert: PKCS Imported (must be exportable)
  • Both Outlook for iOS/Android and native mail apps
  • Enroll via iOS/Android email profile referencing cert
  • Public key sharing: Automatic via Exchange GAL

๐Ÿ“ง Outlook S/MIME Steps

1

Deploy signing certificate

SCEP or PKCS user certificate with Email Protection EKU.

2

Deploy encryption certificate

PKCS Imported PFX with same email address as UPN.

3

Configure email profile

Reference both certificates in the iOS/Android email configuration profile.

๐Ÿ”„ Lifecycle & Renewal

โณ Renewal Logic

  • Renewal threshold: percentage of cert lifetime
  • Default: 20% (e.g., renew 73 days before expiry for 1-year cert)
  • Intune automatically triggers renewal
  • New certificate issued without user interaction
  • Old certificate revoked on successful renewal

๐Ÿ—‘๏ธ Revocation Scenarios

  • Device retire: Certificate automatically revoked
  • Device wipe: Certificate revoked and removed
  • Profile unassignment: Certificate revoked from device
  • User removed: User cert revoked
  • Manual revocation: Via ADCS MMC or script
Intune notifies the Certificate Connector to revoke the certificate in ADCS when a device is retired or wiped โ€” this ensures complete certificate lifecycle management without manual intervention.

๐Ÿ“Š Monitoring & Reports

๐Ÿ“‹ Certificate Inventory

  • Intune โ†’ Devices โ†’ Monitor โ†’ Certificate
  • Status: Installed, Error, Pending
  • Expiry date per device
  • Export to CSV

๐Ÿ”Œ Connector Health

  • Intune โ†’ Tenant admin โ†’ Connectors
  • Last check-in time
  • Active / Warning / Error status
  • Connector version

๐Ÿ“ก Event Log (On-prem)

  • Applications and Services Logs
  • Microsoft โ†’ Intune โ†’ CertConnector
  • NDES IIS logs: %SystemDrive%\inetpub\logs
  • CA Event Log: Security (Event 4886)

๐Ÿ”ง Troubleshooting

โŒ Common Issues & Solutions

SymptomLikely CauseResolution
Certificate profile in Error stateNDES unreachable or wrong SCEP URLTest SCEP URL from device browser; check firewall
Connector shows inactiveOutbound HTTPS blocked, service stoppedCheck network, restart Intune Connector Service
Certificate issued but not installedTemplate permissions missingGrant service account Enroll on template
PKCS cert not deliveredCA FQDN or name mismatchVerify CA Name matches exactly in profile
Renewal not triggeringThreshold too low, device offlineIncrease threshold; ensure device checks in regularly
EAP-TLS Wi-Fi failsRoot CA not trusted, wrong EKUVerify root/intermediate deployed; check Server Auth EKU
# Test SCEP URL from client (PowerShell)
$scepUrl = "https://ndes.corp.contoso.com/certsrv/mscep/mscep.dll"
$response = Invoke-WebRequest -Uri $scepUrl -Method GET -UseDefaultCredentials
Write-Host "Status: $($response.StatusCode)"

# Check Intune certificate connector logs
Get-EventLog -LogName "Microsoft-Intune-CertConnector/Operational" -Newest 50 |
    Where-Object { $_.EntryType -eq "Error" } |
    Select-Object TimeGenerated, Message

# List certificates on device
Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject, NotAfter, Issuer

๐Ÿ’ป PowerShell & Graph API

# Get all SCEP/PKCS profiles via Graph
Connect-MgGraph -Scopes "DeviceManagementConfiguration.Read.All"

$profiles = Get-MgDeviceManagementDeviceConfiguration |
    Where-Object { $_.'@odata.type' -like "*Certificate*" }

$profiles | Select-Object DisplayName, Id, LastModifiedDateTime

# Get certificate deployment status per device
$profileId = "your-profile-guid"
Get-MgDeviceManagementDeviceConfigurationDeviceStatus -DeviceConfigurationId $profileId |
    Select-Object DeviceDisplayName, Status, LastReportedDateTime

# Export certificate report to CSV
$results = Get-MgDeviceManagementDeviceConfigurationDeviceStatus -DeviceConfigurationId $profileId
$results | Export-Csv -Path "C:\Reports\CertStatus.csv" -NoTypeInformation

# Check connector health via Graph
GET https://graph.microsoft.com/beta/deviceManagement/ndesConnectors

# Revoke certificate manually
$caServer = "ca.corp.contoso.com"
$serialNum = "1a2b3c4d5e6f"
certutil -config $caServer -revoke $serialNum 0  # 0 = Unspecified

โœ… Implementation Checklist

๐Ÿ—๏ธ Infrastructure

  • Root CA is offline and secured
  • Issuing CA configured with proper templates
  • NDES role installed on dedicated server
  • Certificate Connector installed and Active
  • Service account permissions configured
  • Outbound HTTPS 443 open from connector
  • SCEP URL accessible from managed devices

๐Ÿ“œ Profiles

  • Trusted Root CA profile created and assigned
  • Intermediate CA profile created (if applicable)
  • SCEP profile for device certificates
  • SCEP/PKCS profile for user certificates
  • Profile assignment order: Root โ†’ SCEP โ†’ Wi-Fi/VPN
  • Renewal threshold set (20โ€“30%)

๐Ÿงช Testing

  • Pilot device receives certificate successfully
  • Wi-Fi EAP-TLS authentication working
  • VPN certificate auth verified
  • Certificate revocation on retire tested
  • Renewal tested with shortened validity

๐Ÿ“Š Operations

  • Certificate expiry monitoring alert configured
  • Connector health monitoring enabled
  • Runbook for connector failure documented
  • CA CRL publishing schedule verified
  • High availability (2+ connectors) in place