|
1 | 1 | --- |
2 | | -updated_at: November 11, 2025 |
| 2 | +updated_at: January 25, 2026 |
3 | 3 | title: Connect Fleet DM to Smallstep |
| 4 | +html_title: Integrate Fleet DM with Smallstep Tutorial |
4 | 5 | description: Connect Fleet DM with Smallstep for device security. Complete guide for deploying certificates to your managed fleet using Fleet's device management platform. |
5 | 6 | --- |
6 | 7 |
|
7 | | -Smallstep can integrate with Fleet DM to deploy certificates to your Fleet-managed devices. |
| 8 | +Smallstep can integrate with [Fleet DM](https://fleetdm.com/) to deploy certificates to your Fleet-managed devices. Fleet has a native Smallstep integration that makes it easy to configure Dynamic SCEP for certificate enrollment. |
| 9 | + |
| 10 | +In this document, we will configure your Fleet instance for use with your Smallstep team. |
8 | 11 |
|
9 | 12 | ## Requirements |
10 | 13 |
|
11 | 14 | You will need: |
12 | 15 |
|
13 | | -- A [Smallstep team](https://smallstep.com/signup) |
14 | | -- A [Fleet DM](https://fleetdm.com/) instance |
| 16 | +- A [Smallstep team](https://smallstep.com/signup) with Pro features enabled |
| 17 | +- A [Fleet DM](https://fleetdm.com/) instance with MDM enabled for your target platforms |
| 18 | + |
| 19 | +Client requirements: |
| 20 | + |
| 21 | +- For SCEP certificate enrollment, devices must be MDM-enrolled in Fleet |
| 22 | +- The Smallstep agent will need to reach the following domains: |
| 23 | + ``` |
| 24 | + smallstep.com |
| 25 | + api.smallstep.com |
| 26 | + gateway.smallstep.com |
| 27 | + control.infra.smallstep.com |
| 28 | + *.[team-name].ca.smallstep.com |
| 29 | + auth.smallstep.com |
| 30 | + att.smallstep.com |
| 31 | + ``` |
| 32 | + |
| 33 | +Supported platforms: |
| 34 | + |
| 35 | +- macOS, iOS, iPadOS (via .mobileconfig profiles) |
| 36 | +- Windows (via .xml profiles) |
| 37 | + |
| 38 | +## Step-by-step instructions |
| 39 | + |
| 40 | +### 1. Get SCEP credentials from Smallstep |
| 41 | + |
| 42 | +First, you'll configure Smallstep and gather the SCEP credentials needed for Fleet. |
| 43 | + |
| 44 | +1. In the Smallstep console, go to [**Settings → Device Management**](https://smallstep.com/app/?next=/settings/devices) |
| 45 | +2. Under Available Providers, find **Jamf** and click **Connect** |
| 46 | + |
| 47 | + <Alert severity="info"> |
| 48 | + <div> |
| 49 | + Fleet uses the same SCEP integration as Jamf. Select Jamf as the provider type in Smallstep. |
| 50 | + </div> |
| 51 | + </Alert> |
| 52 | + |
| 53 | +3. Enter your Jamf Pro Server URL (you can use a placeholder value like `https://fleet.example.com` since Fleet doesn't require this connection) |
| 54 | +4. After connecting, temporarily save the following values: |
| 55 | + - **SCEP URL** (e.g., `https://wifi.example.ca.smallstep.com/scep/integration-jamf-abc123`) |
| 56 | + - **SCEP Challenge URL** (e.g., `https://wifi.example.ca.smallstep.com/jamf/abc123-def456/challenge`) |
| 57 | + - **Challenge Basic Authentication Username** |
| 58 | + - **Challenge Basic Authentication Password** |
| 59 | + |
| 60 | +### 2. Add the Smallstep Certificate Authority in Fleet |
| 61 | + |
| 62 | +Now we'll add the Smallstep SCEP credentials to Fleet. |
| 63 | + |
| 64 | +1. In Fleet, go to **Settings** (click your profile icon in the top right) |
| 65 | +2. Navigate to **Integrations → Certificate authorities** |
| 66 | +3. Click **Add CA** |
| 67 | +4. From the dropdown, select **Smallstep** |
| 68 | +5. Fill in the fields: |
| 69 | + - **Name**: A unique identifier using letters, numbers, and underscores only (e.g., `WIFI_CERTIFICATE`). Fleet will create configuration profile variables with this name as a suffix. |
| 70 | + - **SCEP URL**: Paste the SCEP URL from Smallstep |
| 71 | + - **Challenge URL**: Paste the SCEP Challenge URL from Smallstep |
| 72 | + - **Username**: Paste the Challenge Basic Authentication Username |
| 73 | + - **Password**: Paste the Challenge Basic Authentication Password |
| 74 | +6. Click **Add CA** |
| 75 | + |
| 76 | +### 3. Create a SCEP configuration profile |
| 77 | + |
| 78 | +Fleet deploys certificates to devices using configuration profiles. You'll need to create a profile that includes the SCEP payload with Fleet's dynamic variables. |
| 79 | + |
| 80 | +Fleet provides these variables for Smallstep certificate enrollment: |
| 81 | + |
| 82 | +| Variable | Description | |
| 83 | +|----------|-------------| |
| 84 | +| `$FLEET_VAR_SMALLSTEP_SCEP_CHALLENGE_{CA_NAME}` | The dynamic SCEP challenge string | |
| 85 | +| `$FLEET_VAR_SMALLSTEP_SCEP_PROXY_URL_{CA_NAME}` | The SCEP proxy URL for certificate requests | |
| 86 | +| `$FLEET_VAR_SCEP_RENEWAL_ID` | A unique renewal identifier for the device | |
| 87 | +| `$FLEET_VAR_HOST_END_USER_EMAIL_IDP` | The end user's email from the identity provider | |
| 88 | + |
| 89 | +Replace `{CA_NAME}` with the name you configured in Step 2 (e.g., `WIFI_CERTIFICATE`). |
| 90 | + |
| 91 | +#### Example macOS/iOS SCEP profile |
| 92 | + |
| 93 | +Create a `.mobileconfig` file with the following structure. This example is for Wi-Fi authentication: |
| 94 | + |
| 95 | +```xml |
| 96 | +<?xml version="1.0" encoding="UTF-8"?> |
| 97 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
| 98 | +<plist version="1.0"> |
| 99 | +<dict> |
| 100 | + <key>PayloadContent</key> |
| 101 | + <array> |
| 102 | + <dict> |
| 103 | + <key>PayloadDisplayName</key> |
| 104 | + <string>Smallstep SCEP</string> |
| 105 | + <key>PayloadIdentifier</key> |
| 106 | + <string>com.smallstep.scep</string> |
| 107 | + <key>PayloadType</key> |
| 108 | + <string>com.apple.security.scep</string> |
| 109 | + <key>PayloadUUID</key> |
| 110 | + <string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string> |
| 111 | + <key>PayloadVersion</key> |
| 112 | + <integer>1</integer> |
| 113 | + <key>PayloadContent</key> |
| 114 | + <dict> |
| 115 | + <key>Challenge</key> |
| 116 | + <string>$FLEET_VAR_SMALLSTEP_SCEP_CHALLENGE_WIFI_CERTIFICATE</string> |
| 117 | + <key>Key Type</key> |
| 118 | + <string>RSA</string> |
| 119 | + <key>Key Usage</key> |
| 120 | + <integer>5</integer> |
| 121 | + <key>Keysize</key> |
| 122 | + <integer>2048</integer> |
| 123 | + <key>Subject</key> |
| 124 | + <array> |
| 125 | + <array> |
| 126 | + <array> |
| 127 | + <string>CN</string> |
| 128 | + <string>$FLEET_VAR_HOST_END_USER_EMAIL_IDP</string> |
| 129 | + </array> |
| 130 | + </array> |
| 131 | + <array> |
| 132 | + <array> |
| 133 | + <string>OU</string> |
| 134 | + <string>$FLEET_VAR_SCEP_RENEWAL_ID</string> |
| 135 | + </array> |
| 136 | + </array> |
| 137 | + </array> |
| 138 | + <key>URL</key> |
| 139 | + <string>$FLEET_VAR_SMALLSTEP_SCEP_PROXY_URL_WIFI_CERTIFICATE</string> |
| 140 | + </dict> |
| 141 | + </dict> |
| 142 | + </array> |
| 143 | + <key>PayloadDisplayName</key> |
| 144 | + <string>Smallstep Certificate</string> |
| 145 | + <key>PayloadIdentifier</key> |
| 146 | + <string>com.smallstep.certificate-profile</string> |
| 147 | + <key>PayloadType</key> |
| 148 | + <string>Configuration</string> |
| 149 | + <key>PayloadUUID</key> |
| 150 | + <string>12345678-90AB-CDEF-1234-567890ABCDEF</string> |
| 151 | + <key>PayloadVersion</key> |
| 152 | + <integer>1</integer> |
| 153 | +</dict> |
| 154 | +</plist> |
| 155 | +``` |
| 156 | + |
| 157 | +<Alert severity="info"> |
| 158 | +<div> |
| 159 | +Replace `WIFI_CERTIFICATE` in the variable names with the CA name you configured in Fleet. |
| 160 | +</div> |
| 161 | +</Alert> |
| 162 | + |
| 163 | +### 4. Deploy the configuration profile |
| 164 | + |
| 165 | +1. In Fleet, go to **Controls → OS settings → Custom settings** |
| 166 | +2. Click **Add profile** |
| 167 | +3. Upload your `.mobileconfig` file |
| 168 | +4. Assign the profile to your desired scope (teams or all devices) |
| 169 | + |
| 170 | +The profile will be deployed to devices at their next check-in. Fleet will automatically substitute the variables with the appropriate values for each device. |
| 171 | + |
| 172 | +## Deploy the Smallstep agent (optional) |
| 173 | + |
| 174 | +Though not required for SCEP certificate enrollment, we recommend deploying the [Smallstep agent](../platform/smallstep-agent.mdx) to your endpoints. The agent makes it easier to configure endpoints and manage certificates for additional use cases like VPN authentication. |
| 175 | + |
| 176 | +You can deploy the agent using Fleet's software management features: |
| 177 | + |
| 178 | +1. Download the agent package: |
| 179 | + - macOS: [step-agent-plugin_latest.pkg](https://packages.smallstep.com/stable/darwin/step-agent-plugin_latest.pkg) |
| 180 | + - Windows (x64): [step-agent-plugin_latest_amd64.msi](https://packages.smallstep.com/stable/windows/step-agent-plugin_latest_amd64.msi) |
| 181 | + - Windows (ARM64): [step-agent-plugin_latest_arm64.msi](https://packages.smallstep.com/stable/windows/step-agent-plugin_latest_arm64.msi) |
15 | 182 |
|
| 183 | +2. In Fleet, go to **Software** and add the package for distribution |
| 184 | +3. Use Fleet's [software deployment](https://fleetdm.com/guides/deploy-software-packages) to install the agent on your devices |
| 185 | +4. Configure the agent using Fleet's [scripting features](https://fleetdm.com/guides/scripts) or a separate configuration profile |
16 | 186 |
|
17 | | -## Configure device sync (coming soon) |
| 187 | +Alternatively, you can use a separate software management system such as [Munki](https://github.com/munki/munki) to deploy the agent. See [install via a software management tool](https://smallstep.com/docs/tutorials/connect-jamf-pro-to-smallstep/#option-2-install-via-a-software-management-tool) for details. |
18 | 188 |
|
19 | | -To sync your devices from Fleet DM, create an [API-only user](https://fleetdm.com/guides/fleetctl#using-fleetctl-with-an-api-only-user) in Fleet DM, and then put the token into the Fleet settings in Smallstep. |
| 189 | +## Confirmation |
20 | 190 |
|
21 | | -## Configure Dynamic SCEP |
| 191 | +To confirm certificate deployment: |
22 | 192 |
|
23 | | -To configure Fleet to use Dynamic SCEP for certificate issuance to your endpoints, follow the instructions in **[Connect end user to WiFi with certificate (Smallstep)](https://fleetdm.com/guides/connect-end-user-to-wifi-with-certificate#smallstep)** |
| 193 | +1. In Fleet, go to **Hosts** and select a device that received the profile |
| 194 | +2. Check the **OS settings** status to verify the profile was applied successfully |
| 195 | +3. In the Smallstep console, go to **Devices** to verify the device has enrolled and received a certificate |
24 | 196 |
|
25 | | -## Deploy the Smallstep agent |
| 197 | +On the device itself: |
26 | 198 |
|
27 | | -Though not required, we suggest deploying the [Smallstep agent](../platform/smallstep-agent.mdx) to your endpoints. The agent makes it easier to configure endpoints and manage certificates. You can deploy the agent [using Fleet's software management](https://fleetdm.com/guides/deploy-software-packages) and [scripting features](https://fleetdm.com/guides/scripts). |
| 199 | +- **macOS**: Open **Keychain Access** and look for a certificate issued by your Smallstep authority |
| 200 | +- **iOS/iPadOS**: Go to **Settings → General → VPN & Device Management** to view installed profiles |
| 201 | +- **Windows**: Open **certmgr.msc** and check the Personal certificates store |
28 | 202 |
|
29 | | -Alternatively, you can use a separate software management system such as [Munki](https://github.com/munki/munki) to deploy the agent. See [install via a software management tool](http://smallstep.com/docs/tutorials/connect-jamf-pro-to-smallstep/#option-2-install-via-a-software-management-tool) for details. |
| 203 | +## Device sync (coming soon) |
30 | 204 |
|
| 205 | +To sync your device inventory from Fleet to Smallstep, create an [API-only user](https://fleetdm.com/guides/fleetctl#using-fleetctl-with-an-api-only-user) in Fleet, and configure the token in Smallstep's Fleet settings. This feature is currently in development. |
31 | 206 |
|
0 commit comments