Chapter 3. Automatically provisioning and onboarding RHEL for Edge devices with FDO client and server
You can use the go-fdo-client and go-fdo-server RPMs to deploy a Go-based implementation of the FIDO Device Onboarding (FDO) client and server. This FIDO Device Onboarding protocol version enables secure, automated, zero-touch provisioning of edge devices.
These Go-based implementations are not compatible with the original FDO RPMs and container images that remain in Technology Preview. Do not use the go-fdo-* packages alongside the fdo-* packages or containers.
3.1. The FDO trust model process overview Copy linkLink copied to clipboard!
FIDO Device Onboarding (FDO) automatically and securely integrates new devices into your Internet of Things (IoT) infrastructure. FDO verifies device authenticity, protects the configuration process, and synchronizes each device with your existing infrastructure upon installation.
FDO provides the following capabilities:
- A zero-touch procedure for onboarding a new device to the owner’s management platform at scale.
- Cryptographic verification of the device’s authenticity and ownership before the exchange of sensitive information.
- Tool for device provisioning across untrusted networks by using a securely encrypted communications channel.
- Application of ownership credentials and configuration during device onboarding rather than at device manufacture (late binding).
FDO is a two-phase process:
Device initialization: The device manufacturer performs the first phase. During this phase, the manufacturer configure the device to perform onboarding after purchase. On completion of this phase:
- The device stores a set of credentials to prove its identity.
- The manufacturer creates an ownership voucher, which is a digital document that proves the ownership chain of the device.
- The device receives a globally unique identifier (GUID).
- Transfer of ownership: The second phase occurs after the device is purchased. During this phase, the device is onboarded to the new owner’s infrastructure.
3.2. Components of the FDO system Copy linkLink copied to clipboard!
FIDO Device Onboarding (FDO) onboarding employs a device-side client application and three specialized FDO servers: Manufacturing, Rendezvous, and Owner.
- Device client
This application is installed on the device and performs the following operations:
- During device manufacture, the client application initializes the device’s FDO state with the help of the Manufacturing server.
- When the final owner installs the device, the client application performs the onboarding process in concert with the Rendezvous and Owner FDO servers.
- Manufacturing server
- Deployed at the device manufacturer’s site, this server is responsible for the FDO Device Initialization protocol, which prepares the device for the FDO onboarding process and creates the Ownership Voucher. The device client initiates device initialization. Once device initialization completes, the Manufacturing server has no further involvement with the onboarding process.
- Rendezvous server
- To enable late binding of device ownership, which is required when the device’s ownership is unknown during manufacturing, the device requires a discovery service at the start of onboarding to securely identify its owner. The Rendezvous server provides this discovery service. The device client contacts the Rendezvous server at the start of the onboarding process to retrieve the network addresses for the Owner server.
- Owner server
- The device owner’s organization deploys the Owner server. It is responsible for integrating the new device into the owner’s IoT infrastructure. When the device is installed and first booted at the owner’s facility, the device client connects to the Owner server and initiates the final phase of onboarding. The FDO onboarding process completes once the Owner server finishes provisioning the device for use.
3.3. The FDO workflow Copy linkLink copied to clipboard!
The FDO workflow consists of two primary stages that move a device from manufacturing to a fully configured, operational state.
Device initialization (FDO DI protocol)
- The device client contacts the manufacturer server.
- The client and server generate credentials, which are stored on the device by the client.
- The manufacturer server produces the ownership voucher containing the network address of the rendezvous server, or Owner server in the case of rendezvous (RV) bypass.
- The manufacturer server assigns a globally unique identifier (GUID) to the device.
- Device initialization completes, and the device is ready for onboarding at the owner’s facility.
On-site onboarding (FDO protocols TO0, TO1, TO2)
- Before the first boot of the device, the server administrator uploads the ownership voucher to the Owner server.
- The upload causes the Owner server to extract the rendezvous server’s network address from the ownership voucher.
- The Owner server contacts the rendezvous server and, by using the ownership voucher, proves it is the legitimate owner of the corresponding device.
- The Owner server provides the rendezvous server with its network addresses so that the device client can contact the Owner server.
- The rendezvous server stores the Owner server information for eventual use by the device client.
- On first boot, the device client retrieves the rendezvous server network address from its on-board device credentials and contacts the rendezvous server.
- The rendezvous server looks up the device’s ownership voucher and associated owner network addresses and returns them to the device client.
- The device client disconnects from the rendezvous server and attempts to connect to the Owner server by using the supplied network addresses.
- The device client and Owner server establish mutual trust by authenticating each other by using information from the ownership voucher and device credentials.
- The device client and Owner server establish a securely encrypted communications channel.
-
The Owner server provisions the device over the secure channel by exchanging
ServiceInfokey-value data. -
The device client uses the
ServiceInfodata to implement the desired device configuration. - On completion of the configuration process, the device is operational, and the FDO workflow ends.
3.4. Cryptographic credentials for FDO Copy linkLink copied to clipboard!
To use the FIDO Device Onboarding (FDO) process, you must provide cryptographic credentials, such as certificates and private keys, to meet its security guarantees. The party deploying FDO must provide these certificates; the FDO packages do not provide them.
The FDO protocol operation requires the following certificates and private keys:
- Manufacturer certificate and key
- Issued by the manufacturer. The manufacturer server uses it only during device initialization and does not share it.
- Owner certificate and key
- Issued by the owner organization. The Owner server requires the private key, and the public certificate is provided to the manufacturer server to use when extending the ownership voucher.
- Device CA certificate and key
- Issued by the manufacturer to certify that the device is legitimate. The manufacturer server uses the certificate and private key during device initialization, and the certificate is provided to the Owner server for verifying the device’s identity.
- TLS certificates
- All FDO servers support network access by using HTTP. You can configure servers to enable HTTPS for security purposes. If you enable HTTPS, you must provide additional certificates for server authentication. These certificates are separate from the certificates required by FDO. For more information, see the server configuration documentation.
- Database support
- All FDO servers require a database to persist state across restarts. You can configure the FDO servers to use either SQLite or PostgreSQL as the database implementation. For more information about FDO server database configuration, see the server configuration documentation.
3.5. Generating test certificates for single-host evaluation Copy linkLink copied to clipboard!
Generate self-signed test certificates by using the go-fdo-server utility script. This utility is intended for development and testing environments where the Manufacturer, Rendezvous, and Owner servers all reside on the same physical or virtual host.
These certificates are suitable for testing and demonstration purposes only. They use a shared directory structure that is not suitable for production or distributed environments.
Prerequisites
-
RHEL 10 Linux system in image mode (
bootc) -
go-fdo-serverRPMs installed locally: The certificate generation script is a component of the server package - Network connectivity between the device and FDO servers
Procedure
Generate all the required keys and certificate files:
$ sudo /usr/libexec/go-fdo-server/generate-go-fdo-server-certs.shThis script writes the generated keys and certificate files into the
/etc/pki/go-fdo-server/directory and sets the appropriate permissions in the following files:-
manufacturer-example.key:: The manufacturer private key file. -
manufacturer-example.crt:: The manufacturer public certificate file. -
owner-example.key: The owner private key file. -
owner-example.crt: The owner public certificate file. -
device-ca-example.key: The device CA private key file. -
device-ca-example.crt: The device CA public certificate file.
Next steps
- Add the required keys and certificate files to the server configurations.
3.6. Installing the FDO Manufacturing server Copy linkLink copied to clipboard!
Install the go-fdo-server-manufacturer RPM package to deploy the Manufacturing server. This service is responsible for performing device initialization and issuing the initial Device Credential.
Prerequisites
- A registered RHEL 10 system
- Subscriptions or repositories enabled that include the FDO server packages
Procedure
Install the Manufacturing server package:
$ sudo dnf install go-fdo-server-manufacturerVerify that the Manufacturing server’s systemd unit file and the default configuration directories were created:
$ sudo systemctl list-unit-files | grep go-fdo-server-manufacturergo-fdo-server-manufacturer.service disabled disabled- Configure certificates by moving the test certificates generated in the previous section to the manufacturer’s configuration path.
After configuration, enable and start the service:
$ systemctl enable --now go-fdo-server-manufacturer
3.7. Configuring the FDO Manufacturing server Copy linkLink copied to clipboard!
Configure the FIDO Device Onboard (FDO) Manufacturing server by modifying the YAML-formatted initialization file and setting the required file permissions. This process ensures the server has the necessary operational parameters and security controls to generate and sign device credentials.
Prerequisites
- You have installed the FDO Manufacturing server RPM packages.
- You have obtained the required certificates and keys from your issuing organization.
-
You have administrative (
sudo) access to the server.
Procedure
-
Install the required credentials by moving all certificates and keys provided by your organization into the
/etc/pki/go-fdo-server/directory. Secure the certificate and key files. Restricted permissions are required to protect the integrity of the credentials. Set the ownership and permissions for the private keys so they are accessible only by the
go-fdo-server-manufactureruser:$ sudo chown go-fdo-server-manufacturer:go-fdo-server /etc/pki/go-fdo-server/device-ca.key /etc/pki/go-fdo-server/manufacturer.key$ sudo chmod 600 /etc/pki/go-fdo-server/device-ca.key /etc/pki/go-fdo-server/manufacturer.keyModify the
/etc/go-fdo-server/manufacturing.yamlconfiguration file to define your operational parameters.NoteAccess to this file is restricted to the
go-fdo-servergroup by default.Define the server parameters. Ensure the following items are correctly mapped in your YAML file:
- Database (
db) - The path to the server’s database.
- Networking (
http) - The server’s HTTP endpoint IP and port.
- Manufacturer Key
- The path to the manufacturer’s private key.
- Device CA
- The paths to the Device CA certificate and private key.
- Owner Certificate
The path to the Owner server’s public certificate.
Example
manufacturing.yamlconfigurationlog: level: info db: type: sqlite dsn: file:/var/lib/go-fdo-server-manufacturer/db.sqlite http: ip: 0.0.0.0 port: "8038" manufacturing: key: /etc/pki/go-fdo-server/manufacturer.key device_ca: cert: /etc/pki/go-fdo-server/device-ca.crt key: /etc/pki/go-fdo-server/device-ca.key owner: cert: /etc/pki/go-fdo-server/owner.crt
- Database (
3.8. Running the FDO Manufacturing server Copy linkLink copied to clipboard!
The FIDO Device Onboarding (FDO) Manufacturing server provides an HTTP interface for administrative tasks and device communication. Network accessibility is mandatory to process initialization requests, manage device credentials, and facilitate the Device Initialization (DI) protocol.
Prerequisites
-
The
go-fdo-server-manufacturerRPM package is installed. -
Test certificates are generated and stored in the
/etc/pki/go-fdo-server/directory. - The server configuration file is updated with valid paths and port settings.
- You have root privileges.
Procedure
Open the Manufacturer server’s default port in the firewalld service:
$ sudo firewall-cmd --add-port=8038/tcp --permanentNoteIf you customized the
http.portparameter in your configuration file, use that port number instead of the default.If you change the default port, you must relabel the new port in SELinux to enable the
go-fdo-serverservice to bind to it. Failure to do so might cause the service to fail to start or be blocked by security policies.To enable traffic on a custom port, such as port 8040, run the following command to install the
policycoreutils-python-utilspackage to use thesemanagecommand.$ sudo semanage port -a -t fdo_port_t -p tcp 8040Reload the firewall to apply the changes:
$ sudo firewall-cmd --reloadEnable and start the manufacturer server by using the
systemdsystem and service manager:$ sudo systemctl enable --now go-fdo-server-manufacturer.serviceThis ensures the server starts automatically upon system reboot.
Verify the manufacturer server status:
$ systemctl status go-fdo-server-manufacturer.service● go-fdo-server-manufacturer.service - Go FDO manufacturer server Loaded: loaded (/usr/lib/systemd/system/go-fdo-server-manufacturer.service; enabled; preset: disabled) Active: active (running) since Fri 2026-03-20 16:15:47 EDT; 38s ago ...Optional: Verify that the server’s network endpoint is functioning and accessible by probing the serve’s
/healthAPI endpoint:$ curl http://<ip-address>:8038/health{"message":"the service is up and running","status":"OK","version":"1.0.0"}To validate that your
firewalldconfiguration is correct, perform this check from a different computer on the network. Local requests typically bypass firewall filtering rules.
3.9. Configuration reference for HTTPS and database Copy linkLink copied to clipboard!
Check the HTTPS and database parameters required to secure network traffic and ensure reliable data persistence. Use these settings to harden your environment and maintain a stable connection between the application and your data layer.
3.9.1. HTTPS requirements Copy linkLink copied to clipboard!
To enable HTTPS, you must provide paths for both the certificate and the private key. Providing only one will result in a connection error.
http.cert- Path to the server certificate.
http.key- Path to the certificate’s private key.
3.9.2. Database connection (db.dsn) Copy linkLink copied to clipboard!
The syntax for the Data Source Name (db.dsn) depends entirely on the db.type you select:
Database type (db.type) | Connection string syntax (db.dsn) |
|---|---|
| SQLite |
|
| PostgreSQL |
|
3.10. Installing the FDO Rendezvous server Copy linkLink copied to clipboard!
Install the go-fdo-server-rendezvous RPM package to deploy the Rendezvous server. This server acts as the directory that redirects devices to their assigned Owner server during onboarding.
Prerequisites
-
You have a registered
bootcRed Hat Enterprise Linux (RHEL) 10 system. -
You have
sudoprivileges. - You have access to the repositories containing the FDO server packages.
Procedure
Install the Rendezvous server package:
$ sudo dnf install go-fdo-server-rendezvousThe package installs several files, creates the
go-fdo-servergroup andgo-fdo-server-rendezvoususer, and installs asystemdservice for running the Rendezvous server.
3.11. Running the FDO Rendezvous server Copy linkLink copied to clipboard!
The Rendezvous server acts as the central directory during the onboarding process. Its HTTP endpoint must be accessible by the device, the Owner server, and for administrative management.
Prerequisites
-
You have installed the
go-fdo-server-rendezvousRPM locally. -
You have configured the
rendezvous-server.conf.dfile, specifically thehttp.port(default is 8041). - You have administrative access.
Procedure
Open the server’s HTTP port in the firewalld service:
$ sudo firewall-cmd --add-port=8041/tcp --permanent$ sudo firewall-cmd --reloadEnable and start the Rendezvous server by using the
systemdservice:$ sudo systemctl enable --now go-fdo-server-rendezvous.serviceVerify the server status:
$ sudo systemctl status go-fdo-server-rendezvous.service● go-fdo-server-rendezvous.service - Go FDO Rendezvous server Loaded: loaded (/usr/lib/systemd/system/go-fdo-server-rendezvous.service; enabled; preset: disabled) Active: active (running) since Fri 2026-03-20 17:21:34 EDT; 16h agoOptional: Verify that the server’s network endpoint is functioning and accessible:
$ curl http://192.168.124.132:8041/healthExample output
{"message":"the service is up and running","status":"OK","version":"1.0.0"}To validate that your
firewalldconfiguration is correct, perform this check from a different computer on the network. Local requests typically bypass firewall filtering rules.Expand Parameter Description log.levelThe logging level. Allowed values:
debug,info(default),warn, anderror.db.typeThe database type. Allowed values:
sqliteandpostgres.db.dsnThe database connection string (for example,
file:database.dbfor SQLite, orhost=localhost port=5432 user=postgres password=secret dbname=mydbfor PostgreSQL).http.ipThe HTTP server IP address or hostname.
http.portThe HTTP server port (string).
http.certOptional: The path to the certificate file to use for server authentication.
http.keyOptional: The path to the private key file of the cert certificate.
3.12. Advanced Rendezvous configuration (TO0) Copy linkLink copied to clipboard!
For most deployments, the default Rendezvous settings are sufficient. To manage server load and device check-in frequency, tune the Transfer of Ownership Protocol 0 (TO0) wait intervals.
The following table describes the TO0 wait interval parameters.
| Parameter | Description |
|---|---|
|
| Optional: The minimum wait time, in seconds, that a device must wait between TO0 requests. If a device attempts to check in more frequently than this value, the request fails. Default: 0 (no minimum wait). |
|
| Optional: The maximum wait time, in seconds, allowed for a TO0 entry. This defines the upper boundary for the device’s check-in interval. Default: 3600 (1 hour). |
3.13. Installing the FDO Owner server Copy linkLink copied to clipboard!
Install the go-fdo-server-owner RPM package to deploy the Owner server for performing device onboarding.
Procedure
Install the
go-fdo-server-ownerpackage:$ sudo dnf install go-fdo-server-ownerThe package installs several files, creates the
go-fdo-servergroup andgo-fdo-server-owneruser, and installs asystemdservice for running the Owner server.Verify that the Owner server’s
systemdunit file is available:$ sudo systemctl list-unit-files | grep go-fdo-server-ownergo-fdo-server-owner.service disabled
3.14. Configuring the FDO Owner server Copy linkLink copied to clipboard!
To configure the FDO Owner server, modify the YAML-formatted configuration file and ensure that the server has access to the necessary certificates and keys. The server reads this file during initialization to establish database connections, network endpoints, and security credentials.
Prerequisites
-
You have installed the
go-fdo-server-ownerRPM package. - You have obtained the required FDO certificates and keys from your issuing organization.
-
You have installed the certificates and keys into the
/etc/pki/go-fdo-serverdirectory.
Procedure
-
Open the
/etc/go-fdo-server/owner.yamlconfiguration file in a text editor. Provide values for the following mandatory configuration items:
- Database configuration: The connection details for the server’s database.
- HTTP endpoint address: The address where the server listens for requests.
- Device CA certificate path: The path to the Device CA certificate file.
- Owner server public certificate path: The path to the Owner server’s public certificate file.
- Owner server private key path: The path to the Owner server’s private key file.
- Optional: Add a list of FDO ServiceInfo Modules (FSIM) to the configuration if you require specific device provisioning during onboarding.
- Save the changes and close the file.
Set the ownership on the
owner.keyfile to thego-fdo-server-owneruser and thego-fdo-servergroup:$ sudo chown go-fdo-server-owner:go-fdo-server /etc/pki/go-fdo-server/owner.keySet the permissions on the
owner.keyfile to restrict access:$ sudo chmod 600 /etc/pki/go-fdo-server/owner.key
3.15. FDO ServiceInfo Modules (FSIMs) Copy linkLink copied to clipboard!
FDO ServiceInfo Modules (FSIMs) enable automated device provisioning during the TO2 protocol exchange. FSIMs deliver credentials, configurations, and scripts to change devices from a factory-default state to a fully operational, managed asset within the owner’s infrastructure.
With FIDO Device Onboard (FDO), you can perform administrative operations from the Owner server by using FDO ServiceInfo Modules (FSIMs). For example, you can use FSIMs to download files to the device, upload files from the device, and run commands on the device.
The following FSIMs are available to the Owner server:
-
fdo.download: Download files to the device’s file system. -
fdo.upload: Upload files from the device’s file system. -
fdo.wget: Download files from an HTTP server to the device’s file system. -
fdo.command: Run commands on the device.
The go-fdo-client must have the necessary privileges to perform these functions on behalf of the Owner server. For example, when downloading files to the device’s file system, the device client must have permission to create and write the file to the destination directory.
FSIMs run during onboarding after the device client and Owner server establish mutual trust, and the secure communications channel is active. This ensures that FSIM operations can perform privileged actions on the device securely.
To use FSIMs, you must specify them in the Owner server’s configuration file. The configuration file supports an ordered list of FSIM configuration entries. The server performs FSIMs in the listed order during onboarding.
- The
fdo.downloadFSIM -
The
fdo.downloadFSIM downloads a file from the Owner server’s file system to the device’s file system. The Owner server downloads the file over the secure communications channel, guaranteeing that sensitive content is protected. - The
fdo.uploadFSIM -
The
fdo.uploadFSIM uploads a file from the device’s file system to the Owner server’s file system. The device uploads the file over the secure communications channel, guaranteeing that sensitive content is protected. The Owner server saves the file to a directory that is unique to the device. - The
fdo.wgetFSIM -
The
fdo.wgetFSIM downloads a file to the device’s file system. The source of the file is an HTTP server. Thefdo.wgetFSIM has much faster download performance thanfdo.download, making it a better choice for downloading large files, such as container images.
The fdo.wget FSIM does not download the file over the secure FDO communications channel. The device connects directly to the target HTTP server. The FDO protocol does not guarantee the security of the HTTP connection. If the file contains sensitive information, you must either encrypt it before downloading or transfer it by using a properly authenticated HTTPS connection.
- The
fdo.commandFSIM -
The Owner server uses the
fdo.commandFSIM to run programs on the device. The device client run these programs, which must be present on the device before you issue thefdo.command. Thefdo.commandFSIM supports passing arguments to the program and redirectingstdoutandstderrback to the Owner server’s logs. Thefdo.commandFSIM supports adding shell scripts directly into the configuration file.
3.16. Configuring FDO ServiceInfo Modules (FSIMs) for device provisioning Copy linkLink copied to clipboard!
You can use FIDO Device Onboard (FDO) ServiceInfo Modules (FSIMs) to automate tasks on a device during the onboarding process, such as downloading files, running commands, or fetching large payloads. To use FSIMs, you must add an fsim section to your Owner server configuration file.
Prerequisites
- You have administrative access to the Owner server.
-
The FDO Owner server is installed and the base configuration in
/etc/go-fdo-server/owner.yamlis complete. -
Any local scripts or files intended for download through the
fdo.downloadmodule are stored in a directory accessible to thego-fdo-serveruser, such as/var/lib/go-fdo-server-owner/scripts/.
Procedure
-
Open your Owner server configuration file (for example,
/etc/go-fdo-server/owner.yaml) in a text editor. Define the
fsimsection and add the required modules. The following example configures a script download, a command execution, and a large file download by usingfdo.wget:log: level: "info" db: type: "sqlite" dsn: "file:/var/lib/go-fdo-server-owner/db.sqlite" http: ip: "0.0.0.0" port: "8043" device_ca: cert: "/etc/pki/go-fdo-server/device-ca.crt" owner: cert: "/etc/pki/go-fdo-server/owner.crt" key: "/etc/pki/go-fdo-server/owner.key" fsim: - module: "fdo.download" files: - src: "/var/lib/go-fdo-server-owner/scripts/setup-env.sh" dst: "/usr/local/bin/setup-env.sh" permissions: "0755" - module: "fdo.command" commands: - command: ["/usr/local/bin/setup-env.sh", "--init"] description: "Initializing environment" - module: "fdo.wget" files: - src: "http://distribution.example.com/images/worker-payload.tar.gz" dst: "/var/tmp/worker-payload.tar.gz" may_fail: trueSave the file and restart the Owner server service to apply the configuration:
$ sudo systemctl restart fdo-owner-server
3.17. Running the FDO Owner server Copy linkLink copied to clipboard!
For administrative management and device communication during the TO2 protocol, make the FDO Owner server HTTP endpoint accessible. Proper network routing is required to facilitate secure ownership transfer and run ServiceInfo provisioning modules.
Prerequisite
- Network accessibility.
Procedure
Ensure that the system firewall does not block the server’s HTTP endpoint by opening the server’s network port:
$ sudo firewall-cmd --add-port=8043/tcp --permanentRestart the
firewalldservice:$ sudo systemctl restart firewalldEnable and start the Owner server by using the
systemdservice:$ sudo systemctl enable --now go-fdo-server-owner.serviceVerify that the server is active:
$ sudo systemctl status go-fdo-server-owner.service● go-fdo-server-owner.service - Go FDO owner server Loaded: loaded (/usr/lib/systemd/system/go-fdo-server-owner.service; enabled; preset: disabled) Active: active (running) since Sun 2026-03-22 16:35:04 EDT; 18s ago ...
Verification
Optional: Verify that the server’s network endpoint is functioning and accessible:
$ curl http://192.168.124.132:8043/health{"message":"the service is up and running","status":"OK","version":"1.0.0"}
3.18. Installing and configuring the FIDO Device Onboard (FDO) client on RHEL 10 Copy linkLink copied to clipboard!
In RHEL 10 image mode, the operating system is immutable. To deploy the FDO client, define the package installation in the Containerfile used to build the bootable container image. This ensures that the client is baked into the file system at build time.
FDO is supported only on a Red Hat Enterprise Linux (RHEL) 10 system in image mode (bootc).
Prerequisites
-
You have a
Containerfile. -
You have a RHEL 10 Linux system in image mode (
bootc). - FDO servers (Manufacturer, Rendezvous, and Owner) are deployed and accessible.
- You have network connectivity between the device and FDO servers.
Procedure
Install the packages by using a
Containerfile:FROM registry.redhat.io/rhel10/rhel-bootc:10.2 #Install the go-fdo-client package using your distribution's package manager: RUN dnf install -y go-fdo-client && dnf clean allNoteIf you plan to use a Trusted Platform Module (TPM) for credential storage, you must also install
tpm2-toolsin theContainerfile. For more information, see <Using_a_TPM>.Build the container image:
$ podman build -t quay.io/example/fdo-client-bootc:latest -f Containerfile .Push the container image to the registry:
$ podman push quay.io/example/fdo-client-bootc:latest-
Reference the container image in your Kickstart file by using the
ostreecontainerdirective to deploy it on the target device.
3.19. Configuring the FDO client Copy linkLink copied to clipboard!
To customize the behavior of the FIDO Device Onboard (FDO) client to suit your environment, manage how it interacts with the manufacturing and onboarding servers.
Configuring the behavior of the FDO client ensures that the device can securely authenticate and receive its intended credentials and software packages during the onboarding process.
Prerequisites
-
You installed the
go-fdo-clientpackage on the target device. - You have access to a command line with sufficient permissions to run the client.
- Optional: You have a predefined configuration file in the YAML or TOML format.
Procedure
Identify the required configuration parameters. To view a comprehensive list of all available flags and options for a specific subcommand, pass the
--helpflag:$ go-fdo-client <command> --help-
Create or edit a configuration file. You can use either the YAML (
.yaml,.yml) or TOML (.toml) format. Ensure that any file paths defined within the configuration are either absolute or relative to your current working directory. Run the client by using a configuration file. Use the
--configflag to point the client to your specific settings:$ go-fdo-client <command> --config /etc/fdo/config.yamlNoteThe file format is automatically detected by the extension provided in the
--configpath.Optional: Override settings by using CLI flags. The client resolves configuration values based on a specific hierarchy. If a value is defined in multiple places, the client applies them in the following order of precedence (from highest to lowest):
-
Positional arguments: Such as the server URL for
device-init. -
CLI flags:
--keyor--kex. - Configuration file values: Settings defined in your YAML or TOML file.
- Default values: Built-in application defaults.
-
Positional arguments: Such as the server URL for
3.20. Using a TPM to store the device credentials Copy linkLink copied to clipboard!
The FIDO Device Onboard (FDO) client can store the device credential in a Trusted Platform Module (TPM) instead of a file. This provides hardware-backed protection for credential secrets.
Prerequisites
-
You have a TPM 2.0 device such as
/dev/tpmrm0. -
You installed the
tpm2-toolspackage in thebootccontainer image. - You have root privileges.
Procedure
Initialize the device by using the TPM:
$ sudo go-fdo-client device-init http://manufacturer.example.com:8038 --key ec256 --tpm /dev/tpmrm0Run the onboarding command by using the TPM:
$ sudo go-fdo-client onboard --key ec256 --kex ECDH256 \ --tpm /dev/tpmrm0
3.21. Verifying the FDO device credential Copy linkLink copied to clipboard!
Verify the FDO device credential to ensure that the initialization process is successful and that the device is ready for secure onboarding.
Prerequisites
- You successfully initialized the device.
-
You installed the
fdo-clientorgo-fdo-clientpackage. - You have root privileges.
Procedure
Verify the credential by using the command appropriate for your storage method:
For file-based storage:
If the credential was stored in the boot directory during initialization, use the
--blobflag to point to the file path.$ sudo go-fdo-client print --blob /boot/device_credentialFor Trusted Platform Module (TPM)-based storage:
If the device uses a Hardware Security Module (HSM) or TPM for enhanced security, use the
--tpmflag and specify the TPM resource manager path.$ sudo go-fdo-client print --tpm /dev/tpmrm0
Verification
Verify the following command output parameters to ensure the device is prepared for deployment:
- The device’s public key information
- Rendezvous server information
- Ownership header status
- Ensure the output does not return an error, which indicates a corrupted or missing credential.
3.22. Clearing FDO device credentials Copy linkLink copied to clipboard!
To decommission a device, repurpose it for a new environment, or troubleshoot failed onboarding attempts, clear the FDO device credentials.
By removing the FDO device credentials, you reset the device’s identity, ensuring that sensitive ownership metadata is cleared and the device is ready to be re-initialized from a clean state.
Prerequisites
- You have root privileges.
-
Optional: For TPM-based clearing, you installed the
tpm2-toolspackage. - All active onboarding processes are stopped.
Procedure
Clear the credential by using the method appropriate for your storage type:
For a file-based credential:
Delete the credential blob from the
/bootdirectory or the specific location defined during initialization.$ sudo rm /boot/device_credentialFor a TPM-backed credential:
If the credential is stored in the Trusted Platform Module (TPM) non-volatile (NV) memory, release the specific index, which is typically 0x01D10001 for FDO.
$ sudo tpm2_nvundefine 0x01D10001
Verification
-
Run the
printcommand. The command fails and returns afile not foundorNV index not definederror, which confirms that the credential is cleared.
3.23. FDO troubleshooting reference Copy linkLink copied to clipboard!
This reference identifies common issues and provides solutions for FIDO Device Onboard (FDO) initialization and onboarding. Use these resolutions and diagnostic commands to resolve configuration issues and ensure a successful ownership transfer.
| Error / Issue | Common Cause | Resolution |
|---|---|---|
|
| The Rendezvous (RV) server has no record of the device. |
|
|
| Missing RV metadata in the device credential. |
|
|
| Self-signed certificates or untrusted Certificate Authority (CA) chains. |
Use the |
|
| Missing or invalid credential in the Trusted Platform Module (TPM) non-volatile (NV) index. |
Run the |
|
| Insufficient user privileges for TPM access. |
Run the command with |
|
| Inconsistent TPM state. |
|
3.23.1. Diagnostic commands: Copy linkLink copied to clipboard!
To further investigate persistent issues, use the following commands to gather metadata or verbose logs.
Print device GUID and metadata:
For file-based credentials:
$ sudo go-fdo-client print --blob /boot/device_credential
For TPM-based credentials:
$ sudo go-fdo-client print --tpm /dev/tpmrm0
Enable verbose debugging:
Add the --debug flag to your command to inspect the HTTP request and response payloads between the client and servers:
$ sudo go-fdo-client onboard --blob /boot/device_credential --key ec256 --kex ECDH256 --debug
Most TO1 failures result from timing issues or a mismatch between the Manufacturer’s programmed Rendezvous info and the location where the Owner server uploaded the voucher. Always verify that the "Rendezvous Server Info" in your manufacturing.yaml file matches the live RV server address.