Solution manual

Validate device identity and code signing in a private trust stack

Configure and validate device identity and private code signing beneath a governed private root CA.

Solution summary

Complexity
Advanced
Estimated time
3–5 hours
API calls
Approximately 25
Phases
5
Audience
Enterprise PKI integrator, DevSecOps engineer, IoT and device engineer

Organizations that manage private device fleets can require two complementary trust controls: certificates that identify devices and private signatures that establish software provenance. This solution configures and validates both capabilities beneath a governed private public key infrastructure (PKI) root CA.

DigiCert® Account Manager provides the automation identity. DigiCert® Private CA provides the root trust anchor and issuing CAs. DigiCert® Device Trust Manager issues device certificates, and DigiCert® Software Trust Manager issues private code-signing certificates and signs a test hash.

The workloads share the account foundation and root trust anchor but remain operationally separate. Each workload has its own purpose-bound end-entity template and issuing-CA variable. You can select the same issuing CA for both variables when your PKI policy permits it. For stronger separation of duties, select two issuing CAs beneath the same root CA.

By the end, you will have

You will have evidence that the tenant can issue purpose-appropriate device and code-signing certificates and produce a verifiable private signature beneath the approved root CA:

  • A service user with the roles required by the setup workflow, an API token, and a client authentication certificate.
  • An active root CA certificate to distribute as the relying-party trust anchor.
  • One or two active private issuing CAs assigned to your account.
  • Separate certificate templates for device authentication and private code signing.
  • A Device Trust Manager certificate policy and device group configured for passcode-authenticated enrollment.
  • A device certificate whose path validates to the private root CA.
  • A Software Trust Manager keypair and private code-signing certificate, plus a signature produced over a known hash.
This workflow validates the DigiCert® ONE configuration and cryptographic outputs in a demo tenant. Production integration with device key stores, relying services, trust distribution, and artifact-specific signing systems is outside this workflow.
The single cross-product service user in this guide simplifies initial setup. For production, use separate identities for administrative setup, device enrollment, and software signing. Give each identity only the roles it needs, and do not use the broadly privileged setup credential in a production pipeline.

One integrator can complete the demo workflow. Production implementation commonly involves separate identity, PKI, device-platform, and release-security owners; coordinate the phase outputs with those owners.

Solution architecture

The root CA certificate is the trust anchor installed in relying-party trust stores. The issuing CA signs the two types of end-entity certificates. Each product has its own certificate template and profile.

flowchart TD
    FOUNDATION["Shared foundation<br/>Setup identity: API token + client certificate<br/>Private root CA + workload issuing CA roles"]

    DEVICE["Device identity<br/>Template + profile + policy + group<br/>Passcode-authenticated enrollment"]
    SIGNING["Code signing<br/>Template + profile + keypair<br/>API token + client certificate for protected operations"]

    DEVICE_OUT["Device identity outcome<br/>Device certificate issued<br/>Key and certificate path verified"]
    SIGNING_OUT["Code-signing outcome<br/>Private signing certificate issued<br/>Certificate path and signature verified"]

    TRUST["Relying-party trust stores<br/>Approved private root required"]

    FOUNDATION -->|"device issuer + setup authentication"| DEVICE
    FOUNDATION -->|"signing issuer + setup authentication"| SIGNING
    FOUNDATION -->|"prepare root-ca.pem for distribution"| TRUST

    DEVICE --> DEVICE_OUT
    SIGNING --> SIGNING_OUT

    DEVICE_OUT -. "validates to approved root" .-> TRUST
    SIGNING_OUT -. "validates to approved root" .-> TRUST

Products and APIs

ProductAPI specificationRole in this solution
Account ManagerAPI referenceIdentify the account and organization, find the required roles, and create the setup identity and credentials.
DigiCert Private CAAPI referenceIdentify the root and issuing CAs, assign each issuer to the account, and download the CA certificates.
Device Trust ManagerAPI referenceSelect the device template, then create the division, certificate profile, policy, authentication configuration, and device group. Issue a device certificate.
Software Trust ManagerAPI referenceSelect the code-signing template, create a private trust certificate profile, keypair, and signing certificate, and sign a hash.

Data flow overview

FromToDataPurpose
Establish the account foundationPrepare the private trust domain, configure device identity, and configure code signingaccount_id, organization_id, service_api_tokenIdentify the target account and organization and authenticate setup calls.
Establish the account foundationConfigure and test private code signingclient.crt, client.keyProvide the second authentication factor for protected Software Trust Manager operations.
Prepare the private trust domainTrust storesroot-ca.pemEstablish the private trust anchor.
Prepare the private trust domainConfigure the device certificate infrastructuredevice_ica_id, device-issuing-ca.pemConfigure and verify device-certificate issuance.
Prepare the private trust domainConfigure and test private code signingsigning_ica_id, signing-issuing-ca.pemConfigure and verify private code-signing certificate issuance.
Configure the device certificate infrastructureDevice certificate profiledevice_certificate_template_idApply the device certificate constraints defined in Device Trust Manager.
Configure and test private code signingSoftware Trust Manager certificate profilecode_signing_certificate_template_idApply the code-signing constraints defined in Software Trust Manager.
Configure the device certificate infrastructureEnroll and verify a devicedivision_id, device_certificate_profile_id, certificate_policy_idConfigure passcode enrollment and issue a device certificate.

When to use this manual

Use this manual when:

  • Your organization needs both private device authentication certificates and private software signatures.
  • Both workloads operate beneath the same approved private root and trust governance model, even when they use separate issuing CAs.
  • You want to validate the cross-product configuration and cryptographic outputs in a demo tenant before integrating production systems.

If the workloads have different trust owners or require separate root CAs, implement them independently instead of treating them as one private trust stack.

Before you begin

Make sure you have:

A DigiCert® ONE account with Account Manager, DigiCert Private CA, Device Trust Manager, and Software Trust Manager entitlements.
An API token for a bootstrap user authorized to list accounts, organizations, and roles and to create the setup service user.
An existing private root CA and active issuing CA. Creating or importing the CA hierarchy is a governed PKI activity outside this workflow.
An active organization record for the private code-signing certificate subject.
An enabled Device Trust Manager rendezvous zone assigned to the account for primary usage.
An active custom Device Trust Manager template for RSA-2048 client authentication certificates.
An active Software Trust Manager code-signing certificate template with type: CUSTOM and template: TEST. In hosted accounts, ask DigiCert Support to create this template before you start if it is not already available.
Tenant roles that grant only the operations used in this guide. Find their exact names with GET /account/api/v1/role. Do not copy role names from another tenant.
curl, jq, OpenSSL, and Python 3 with the requests package for the examples.
A demo tenant for validation before production use.

The required capabilities are:

ProductRequired capabilities
Account ManagerManage users for the bootstrap user. Each role selected for the other products also needs access to the target account.
DigiCert Private CAView CM CA (VIEW_CM_CA) and Manage CM CA Accounts (MANAGE_CM_CA_ACCOUNTS).
Device Trust ManagerA role that contains Solution administrator for the configuration workflow.
Software Trust ManagerManage certificate profiles, View certificate template, View keypair, Generate keypair, Generate certificate, and Sign.
The examples use the US demo host demo.one.digicert.com. Substitute the host for your tenant and region. Software Trust Manager operations that require multi-factor authentication use clientauth.<host>, the service user’s client certificate, and the service user’s API token in the x-api-key header.

The guided workflow provides a complete cURL path. Selected steps also include Python examples. This manual uses snake_case names for values passed between phases. The cURL examples export equivalent uppercase environment variables, such as ACCOUNT_ID for account_id, and the Python examples retain snake_case. Store secrets passed between phases, such as service_api_token and passcode, in an approved secret manager rather than in a general-purpose environment file.

Key concepts

TermDefinition
Root CA and trust anchorThe root certificate installed in a relying party’s trust store. It terminates certificate-path validation.
Issuing CA (ICA)The intermediate CA that signs end-entity certificates. It is an issuer, not the trust anchor.
Certificate templateThe purpose-bound constraints for issued certificates, including allowed key types, subject fields, validity, key usage, and extended key usage.
Certificate profileA product-specific configuration that refines an end-entity template for a workload.
Certificate policyThe Device Trust Manager object that binds a profile, issuing CA, division, and enrollment methods.
Authentication policyA Device Trust Manager collection of enrollment credentials, such as passcodes.
Service userA non-interactive Account Manager identity represented by an API token and, where required, a client authentication certificate.

Implementation roadmap

Establish the account foundation, then prepare the private trust domain. The complete validation includes both device identity and code signing. After the shared foundation is ready, complete the workstreams concurrently or in either order.

Next, complete both required workstreams. You may work in any order or in parallel.

Implementation complete Both required workstreams are finished.
View operational guidance

Planning time

WorkFocused execution time
Shared foundation50 minutes
Device identity45 minutes
Code signing30 minutes
Full workflowApproximately 125 minutes

Plan for 3–5 hours in a prepared demo tenant. This estimate includes review, environment setup, resource availability checks, approval or wait time, and validation in addition to focused execution. It does not include the lead time to establish the CA hierarchy, obtain product entitlements, provision support-managed templates, or complete production approvals.

Resume after a pause

  1. Consult the implementation status and saved values table.
  2. Verify the saved values and the last phase checkpoint you satisfied.
  3. Resume at the first unmet checkpoint.
  4. Search for existing resources before repeating any request that creates or changes a resource. A timed-out create request might have succeeded even when its response was lost.

After validation

Start the implementation

Establish the account foundation