mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
add document with MDM glossary and protocols summary (#8765)
This commit is contained in:
parent
c2647c3111
commit
ac5d04cde7
224
tools/mdm/apple/glossary-and-protocols.md
Normal file
224
tools/mdm/apple/glossary-and-protocols.md
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
## Glossary
|
||||||
|
|
||||||
|
### SCEP: Simple Certificate Enrollment Protocol
|
||||||
|
|
||||||
|
SCEP is a protocol that allows devices to get a certificate from a CA (in our
|
||||||
|
case, the Fleet server). This certificate is used later on to authenticate to
|
||||||
|
the MDM server.
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- [SCEP summary](#scep-summary) below
|
||||||
|
- [RFC 8894](https://datatracker.ietf.org/doc/html/rfc8894)
|
||||||
|
|
||||||
|
### DEP: Device Enrollment Program
|
||||||
|
|
||||||
|
A device enrolled via DEP prompts the user to enroll in MDM during the initial
|
||||||
|
device setup process (right after macOS is installed.)
|
||||||
|
|
||||||
|
DEP is also called "automatic" enrollment because it doesn't require user
|
||||||
|
action to download and activate a profile like [manual
|
||||||
|
enrollment](#manual-enrollment) does.
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- [DEP Workflow Summary](#dep-workflow-summary)
|
||||||
|
- [MDM protocol specification](https://developer.apple.com/business/documentation/MDM-Protocol-Reference.pdf)
|
||||||
|
|
||||||
|
### Manual enrollment
|
||||||
|
|
||||||
|
A method to enroll a device to an MDM server by manually getting and
|
||||||
|
installing (generally by downloading from a URL) an [enrollment
|
||||||
|
profile](#enrollment-profile).
|
||||||
|
|
||||||
|
### ABM: Apple Business Manager
|
||||||
|
|
||||||
|
Interface to administer Devices and MDM servers, mainly used for [DEP
|
||||||
|
enrollment](#dep-enrollment).
|
||||||
|
|
||||||
|
Can be accessed at https://business.apple.com/ .
|
||||||
|
|
||||||
|
### APNs: Apple Push Notification Service
|
||||||
|
|
||||||
|
MDM uses the Apple Push Notification Service (APNs) to deliver a "wake up"
|
||||||
|
message to managed devices. The device then connects to the MDM server to
|
||||||
|
retrieve [commands](#commands) and return results.
|
||||||
|
|
||||||
|
APNs are servers managed by Apple, the MDM server needs a certificate signed by
|
||||||
|
Apple to authenticate with them.
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- [MDM Protocol summary](#mdm-protocol-summary)
|
||||||
|
- [MDM protocol specification](https://developer.apple.com/business/documentation/MDM-Protocol-Reference.pdf)
|
||||||
|
|
||||||
|
### Profile
|
||||||
|
|
||||||
|
A configuration profile is an XML file that allows to distribute configuration
|
||||||
|
information, for example: restrictions on device features, VPN settings, etc.
|
||||||
|
|
||||||
|
Profiles have the `.mobileconfig` extension and can be administered in a device
|
||||||
|
from "Settings > Profiles."
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- [Configuration Profile Reference](https://developer.apple.com/business/documentation/Configuration-Profile-Reference.pdf).
|
||||||
|
|
||||||
|
### Enrollment profile
|
||||||
|
|
||||||
|
An enrollment profile is a [profile](#profile) that contains special directives
|
||||||
|
to enroll a device to an MDM server.
|
||||||
|
|
||||||
|
For [DEP enrollment](#dep-device-enrollment-program) this profile is
|
||||||
|
automatically sent an installed into the device.
|
||||||
|
|
||||||
|
For [manual enrollment](#manual-enrollment) the profile needs to be downloaded
|
||||||
|
and installed by the user.
|
||||||
|
|
||||||
|
### Commands
|
||||||
|
|
||||||
|
After a device is enrolled, an MDM server can send commands to be executed in
|
||||||
|
the device (e.g: install an application, shut down the device, etc.)
|
||||||
|
|
||||||
|
The server first sends a [push
|
||||||
|
notification](#apons-apple-push-notification-service), then the device polls
|
||||||
|
the server for the command, processes the command, and reports the command
|
||||||
|
results to the server.
|
||||||
|
|
||||||
|
### CSR: Certificate Signing Request
|
||||||
|
|
||||||
|
Issued by the server that needs validation from a signing authority, the
|
||||||
|
request has the public key in the pair and information about the server
|
||||||
|
(organization name, etc)
|
||||||
|
|
||||||
|
The CSR itself is usually created in a Base-64 based PEM format
|
||||||
|
|
||||||
|
### PKI: Public Key Infrastructure
|
||||||
|
|
||||||
|
Allows authenticating users and devices. The basic idea is to have one or more
|
||||||
|
trusted parties digitally sign documents certifying that a particular
|
||||||
|
cryptographic key belongs to a particular user or device. The key can then be
|
||||||
|
used as an identity for the user.
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- https://www.ssh.com/academy/pki
|
||||||
|
- https://en.wikipedia.org/wiki/Public_key_infrastructure
|
||||||
|
|
||||||
|
### CA: Certificate Authority
|
||||||
|
|
||||||
|
The primary role of the CA is to digitally sign and publish a public key
|
||||||
|
bound to a given user.
|
||||||
|
|
||||||
|
This is done using the CA's own private key, so that
|
||||||
|
trust in the user key relies on one's trust in the validity of the CA's key.
|
||||||
|
|
||||||
|
Resources:
|
||||||
|
|
||||||
|
- https://en.wikipedia.org/wiki/Public_key_infrastructure#Certificate_authorities
|
||||||
|
|
||||||
|
## SCEP summary
|
||||||
|
|
||||||
|
SCEP is a [PKI](#pki-public-key-infrastructure) protocol that allows devices to
|
||||||
|
request certificates from a [CA](#ca-certificate-authoriy) (in our context, the
|
||||||
|
Fleet server acts as a CA) that will be later used to authenticate with the MDM
|
||||||
|
server (in our context, the Fleet server also acts as the MDM server.)
|
||||||
|
|
||||||
|
To enroll, a client provides a distinguished name and a public key, and the
|
||||||
|
server responds with a X.509 certificate.
|
||||||
|
|
||||||
|
The CA server might also request a `challengePassword`, which is a shared
|
||||||
|
secret that the server uses gate access to certificates, its omission allows
|
||||||
|
for unauthenticated authorisation of enrolment requests.
|
||||||
|
|
||||||
|
More generally, the protocol is specified in [RFC
|
||||||
|
8894](https://datatracker.ietf.org/doc/html/rfc8894) and allows:
|
||||||
|
|
||||||
|
- [CA](#ca-certificate-authority) public key distribution
|
||||||
|
- Certificate enrolment and issue
|
||||||
|
- Certificate renewal
|
||||||
|
- Certificate query
|
||||||
|
- Query (not perform) certificate revocation
|
||||||
|
|
||||||
|
## MDM Protocol summary
|
||||||
|
|
||||||
|
This is a rough summary of the [MDM Protocol
|
||||||
|
Reference](https://developer.apple.com/business/documentation/MDM-Protocol-Reference.pdf).
|
||||||
|
|
||||||
|
The protocol is composed by the MDM Check-in protocol and the main MDM protocol.
|
||||||
|
|
||||||
|
### MDM Check-in Protocol
|
||||||
|
|
||||||
|
Used during initialization, validates if the device can be enrolled and
|
||||||
|
notifies the server.
|
||||||
|
|
||||||
|
It's composed by three different messages sent by the device to the server.
|
||||||
|
|
||||||
|
**Authenticate**
|
||||||
|
|
||||||
|
When the MDM payload is being installed, the device tries to stablish a
|
||||||
|
connection with the server. This is when the
|
||||||
|
[SCEP](#scep-simple-certificate-enrollment-protocol) exchange takes place.
|
||||||
|
|
||||||
|
The device sends its UDID and the [topic](#push-notification-topic) that should
|
||||||
|
be used for push notifications.
|
||||||
|
|
||||||
|
The server shouldn't assume that the device has installed the MDM payload, as
|
||||||
|
other payloads in the profile may still fail to install. When the device has
|
||||||
|
successfully installed the MDM payload, it sends a `TokenUpdate` message.
|
||||||
|
|
||||||
|
**TokenUpdate**
|
||||||
|
|
||||||
|
A device sends a token update message to the server when it has installed the
|
||||||
|
MDM payload or whenever its device push token, push magic, or unlock token
|
||||||
|
change. These fields are needed by the server to send the device push
|
||||||
|
notifications or passcode resets.
|
||||||
|
|
||||||
|
The server should send push messages to the device only after receiving the
|
||||||
|
first token update message.
|
||||||
|
|
||||||
|
**CheckOut**
|
||||||
|
|
||||||
|
The device attempts to notify the server when the MDM profile is removed.
|
||||||
|
|
||||||
|
- In macOS v10.9, this only happens if the `CheckOutWhenRemoved` key in the
|
||||||
|
[MDM payload](#enrollment-profile) is set to true.
|
||||||
|
- In macOS v10.8, this always happens.
|
||||||
|
|
||||||
|
If network conditions don't allow the message to be delivered successfully,
|
||||||
|
the device makes no further attempts to send the message.
|
||||||
|
|
||||||
|
### Main MDM Protocol
|
||||||
|
|
||||||
|
After the device is enrolled, the server (at some point in the future) sends
|
||||||
|
out a push notification to the device, then:
|
||||||
|
|
||||||
|
- The device polls the server for a [command](#commands) in response to the
|
||||||
|
push notification.
|
||||||
|
- The device performs the command.
|
||||||
|
- The device contacts the server to report the result of the last command and
|
||||||
|
to request the next command.
|
||||||
|
|
||||||
|
To see all available commands, look under "Support for macOS Requests" in the
|
||||||
|
MDM Protocol Reference.
|
||||||
|
|
||||||
|
## DEP Workflow Summary
|
||||||
|
|
||||||
|
In order to get information about devices enrolled through DEP, the MDM server
|
||||||
|
needs to communicate with Apple servers periodically.
|
||||||
|
|
||||||
|
The workflow looks like:
|
||||||
|
|
||||||
|
1. The MDM server gets a token that will use to authenticate to Apple servers.
|
||||||
|
This process is described in detail in the MDM protocol reference. Some parts
|
||||||
|
of it can be automated by MDM solutions.
|
||||||
|
2. The MDM server periodically pings
|
||||||
|
`GET https://mdmenrollment.apple.com/server/devices` and
|
||||||
|
`GET https://mdmenrollment.apple.com/devices/sync` to get
|
||||||
|
information about newly enrolled devices and changes on devices already
|
||||||
|
enrolled.
|
||||||
|
3. The MDM server defines and assigns profiles to devices using `POST
|
||||||
|
https://mdmenrollment.apple.com/profile` and `PUT
|
||||||
|
https://mdmenrollment.apple.com/profile/devices`
|
||||||
|
4. The MDM server removes profiles from a device using `DELETE
|
||||||
|
https://mdmenrollment.apple.com/profile/devices`
|
Loading…
Reference in New Issue
Block a user