certificates icon indicating copy to clipboard operation
certificates copied to clipboard

Allow CA interface to control validation of Client Identifiers for device-attest-01 acme requests

Open mishaslavin opened this issue 5 months ago β€’ 1 comments

author Venky Gopal [email protected] 1693934844 -0400 committer mishaslavin [email protected] 1749672251 -0700

Name of feature:

(Duplicate of #1525)

Propagate attested client identifiers (serial and attestation object) to CA interface & allow global API level bypass of a) Client Identitifer to UUID/Serial association b) CSR CN to Client Identifier association. This allows organizations to specify arbitrary values in Apple's ClientIdentifier field as part of the MDM ACME payload and defer validation of that identifier to the Certificate Authority.

The API level global bypass is not great, but I created to add more concreteness to the ask.

Pain or issue this feature alleviates:

Allows us to specify any arbitrary values (such as a one time token like JWT, etc in the ClientIdentifier field in the MDM payload. This is crucial for organizations to be able to use this payload for different types of attested certificates having different user authentication requirements.

Why is this important to the project (if not answered above):

Allows adoption of device-attest-01 in ACME for different types of Attested certificates in Enterprises.

Is there documentation on how to use this feature? If so, where?

In what environments or workflows is this feature supported?

In what environments or workflows is this feature explicitly NOT supported (if any)?

Supporting links/other PRs/issues:

(duplicate of #1525) πŸ’”Thank you!

up-to-date test outputs:

mslavin@mslavin-wsl:~/certificates$ make test
βœ“  api/log (7ms) (coverage: 66.7% of statements)
βœ“  api/render (9ms) (coverage: 83.7% of statements)
βˆ…  authority/admin (10ms) (coverage: 0.0% of statements)
βˆ…  api/models (13ms) (coverage: 0.0% of statements)
βœ“  acme/wire (15ms) (coverage: 96.0% of statements)
βœ“  api/read (19ms) (coverage: 100.0% of statements)
βœ“  authority/config (30ms) (coverage: 67.0% of statements)
βˆ…  authority/administrator (30ms) (coverage: 0.0% of statements)
βœ“  authority/admin/db/nosql (33ms) (coverage: 94.8% of statements)
βœ“  authority/admin/api (78ms) (coverage: 88.3% of statements)
βœ“  authority/internal/constraints (21ms) (coverage: 81.6% of statements)
βœ“  authority/policy (30ms) (coverage: 41.7% of statements)
βœ“  acme/db/nosql (695ms) (coverage: 96.7% of statements)
βœ“  acme/api (750ms) (coverage: 91.9% of statements)
βœ“  authority/provisioner/wire (65ms) (coverage: 90.4% of statements)
βˆ…  ca/client (5ms) (coverage: 0.0% of statements)
βœ“  cas/apiv1 (6ms) (coverage: 97.6% of statements)
βœ“  cas (19ms) (coverage: 95.0% of statements)
βœ“  ca/identity (45ms) (coverage: 93.3% of statements)
βœ“  cas/cloudcas (185ms) (coverage: 96.4% of statements)
βœ“  authority (2.188s) (coverage: 47.5% of statements)
βˆ…  cmd/step-ca (6ms) (coverage: 0.0% of statements)
βœ“  cas/vaultcas/auth/approle (9ms) (coverage: 86.4% of statements)
βˆ…  commands (9ms) (coverage: 0.0% of statements)
βœ“  cas/vaultcas/auth/kubernetes (19ms) (coverage: 87.5% of statements)
βœ“  cas/vaultcas/auth/aws (25ms) (coverage: 82.8% of statements)
βœ“  cas/vaultcas (57ms) (coverage: 79.2% of statements)
βœ“  cas/softcas (872ms) (coverage: 91.6% of statements)
βˆ…  examples/basic-federation/client (4ms) (coverage: 0.0% of statements)
βˆ…  examples/basic-client (5ms) (coverage: 0.0% of statements)
βˆ…  internal/metrix (5ms) (coverage: 0.0% of statements)
βˆ…  examples/bootstrap-mtls-server (6ms) (coverage: 0.0% of statements)
βˆ…  examples/bootstrap-tls-server (6ms) (coverage: 0.0% of statements)
βˆ…  examples/bootstrap-client (6ms) (coverage: 0.0% of statements)
βˆ…  examples/basic-federation/server (7ms) (coverage: 0.0% of statements)
βœ“  internal/cast (6ms) (coverage: 100.0% of statements)
βˆ…  internal/httptransport (8ms) (coverage: 0.0% of statements)
βˆ…  internal/userid (6ms) (coverage: 0.0% of statements)
βœ“  errs (11ms) (coverage: 36.4% of statements)
βœ“  db (19ms) (coverage: 26.5% of statements)
βœ“  middleware/requestid (4ms) (coverage: 95.2% of statements)
βœ“  logging (12ms) (coverage: 45.9% of statements)
βˆ…  monitoring (40ms) (coverage: 0.0% of statements)
βœ“  api (3.428s) (coverage: 78.5% of statements)
βˆ…  server (17ms) (coverage: 0.0% of statements)
βœ“  scep/api (17ms) (coverage: 26.8% of statements)
βœ“  templates (19ms) (coverage: 93.5% of statements)
βœ“  policy (24ms) (coverage: 93.0% of statements)
βˆ…  scripts/badger-migration (33ms) (coverage: 0.0% of statements)
βœ“  pki (373ms) (coverage: 33.8% of statements)
βœ“  webhook (7ms) (coverage: 69.6% of statements)
βˆ…  test/integration/scep/internal/x509 (8ms) (coverage: 0.0% of statements)
βœ“  scep (1.827s) (coverage: 36.6% of statements)
βœ“  test/integration (1.889s)
βœ“  acme (7.201s) (coverage: 68.3% of statements)
βœ“  cas/stepcas (9.893s) (coverage: 93.9% of statements)
βœ“  test/integration/scep (13.531s)
βœ“  authority/provisioner (24.883s) (coverage: 82.3% of statements)
βœ“  ca (29.187s) (coverage: 43.3% of statements)

=== Skipped
=== SKIP: acme Test_parseAndVerifyWireAccessToken (0.00s)
    challenge_wire_test.go:2126: skip until we can retrieve public key from e2e test, so that we can actually verify the token

DONE 4773 tests, 1 skipped in 31.102s
βœ“  acme (13.696s) (coverage: 75.1% of statements)

=== Skipped
=== SKIP: acme Test_parseAndVerifyWireAccessToken (0.00s)
    challenge_wire_test.go:2126: skip until we can retrieve public key from e2e test, so that we can actually verify the token

DONE 366 tests, 1 skipped in 13.696s

mishaslavin avatar Jun 12 '25 22:06 mishaslavin