Skip to content

Add ChromeOS Wi-Fi enrollment via ACME Device Attestation - #546

Draft
llewis1234 wants to merge 21 commits into
smallstep:mainfrom
llewis1234:docs/chromeos-wifi-enrollment
Draft

Add ChromeOS Wi-Fi enrollment via ACME Device Attestation#546
llewis1234 wants to merge 21 commits into
smallstep:mainfrom
llewis1234:docs/chromeos-wifi-enrollment

Conversation

@llewis1234

Copy link
Copy Markdown

Summary

  • Adds a "ChromeOS with Google Workspace (ACME Device Attestation)" section to the wireless networks guide, covering RADIUS server config, the EAP-TLS Wi-Fi network setup in Google Admin, setting the issuer pattern, and verification/troubleshooting
  • Replaces the old inline Wi-Fi certificate auto-selection steps in the browser certificate setup guide with a pointer to the new section, since the two now depend on the same underlying device identity certificate

Blocked on #545 — this branch is stacked on top of it, so the diff below currently includes #545's changes too. Once #545 merges, this diff will automatically collapse down to just this PR's own changes and it'll be ready for review. Opening now as a draft so it's visible and trackable rather than sitting only in my fork.

Test plan

  • vale run against changed files (noise-filtered against house style — no unaddressed findings)
  • markdown-link-check run against changed files — all internal/external links resolve once Add ChromeOS device identity certificates tutorial #545 is merged
  • Visual preview via the docs renderer (not yet done — recommend before merge)

🤖 Generated with Claude Code

@CLAassistant

CLAassistant commented Aug 1, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

Comment thread tutorials/protect-wireless-networks.mdx Outdated
Comment thread tutorials/protect-wireless-networks.mdx Outdated

<Alert severity="info" mb={4}>
<div>
Skip Step 1 (credential) and the Wi-Fi resource created at the top of Step 3 for ChromeOS. Neither applies here: the client certificate comes from Certificate Manager directly, and the Wi-Fi network profile is delivered by Google Admin rather than by Smallstep.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eventually we'll want these resources to still be created, so that the ChromeOS agent can get a full configuration, with more use cases automatically handled. We'll have to ensure that we have docs on root distribution for all use cases configured for ChromeOS.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, interesting. I understand why a credential might be valuable for this, but is the extension also going to be capable of taking over Wi-Fi or VPN config settings?

Comment thread tutorials/protect-wireless-networks.mdx Outdated
Comment thread tutorials/protect-wireless-networks.mdx
hslatman and others added 15 commits August 2, 2026 16:07
Also specify the numeric GCP project ID to be used.
Rebased onto herman/chromeos-wif — drops the Verified Access Mode and
extension deployment steps that PR previously added, since that PR now
covers the same ground as part of its Workload Identity Federation
rewrite of the Google Workspace connection flow.
By default the extension only gets a short-lived attestation
certificate, not a usable device identity certificate — point readers
to the next step.
- The trust-distribution failure isn't a dead end: the extension
  retries in the background, it's just that nothing surfaces the
  retry or the failure to an admin.
- Downgrade the curl verification tip to info severity, and clarify
  it runs from the admin's own machine, not the Chromebook.
- devices_ca_directory_url isn't required for the default Devices
  authority — only needed for Accounts or a non-default Devices setup.
- The dashboard not showing the device identity cert is a known gap
  in the ChromeOS extension, not related to ACME vs. SCEP (ChromeOS
  doesn't use SCEP at all).

Per Herman's review comments on smallstep#545.
It's an implementation detail readers don't need: the ACME Device
Attestation exchange issues it automatically, and it's never usable
for mTLS or exposed in Certificate Manager. Keep the one practically
useful fact (a freshly enrolled device isn't immediately mTLS-ready)
without explaining why.

Per Herman's review comments on smallstep#545 (L8, L27).
The authority is normally set up together with a Smallstep contact
during onboarding, not picked independently from an open menu — this
was overstating the current self-service reality.

Per Herman's review comment on smallstep#545 (L39).
Fix a bug: the default-authority path was pointing readers to skip
to Step 4 (force re-enrollment), when there's nothing to force if no
policy changed — it should skip straight to Step 5 (verify).

Step 4 itself only applies when Step 3's policy change happens on a
device that's already enrolled with a valid certificate (e.g.
switching authorities later) — never on first-time setup.

Per Herman's review comment on smallstep#545 (L77).
A bare <team-slug> in prose (outside code formatting) is parsed as an
unclosed JSX tag, which fails MDX compilation for the whole page.
Wrap it in backticks like every other placeholder in this doc.

This is pre-existing content from smallstep#528 (herman/chromeos-wif), not
introduced here — flagged separately on that PR.
llewis1234 added a commit to llewis1234/smallstep_docs that referenced this pull request Aug 2, 2026
- Trim the redundant "not through MDM/Smallstep resources" clause.
- Trust store only needs the authority's root — ChromeOS's EAP-TLS
  handshake already includes the client intermediate.
- "No RADIUS traffic" isn't always a certificate-selection failure;
  it can also mean no device identity certificate was issued at all.

Per Herman's review comments on smallstep#546.
@llewis1234
llewis1234 force-pushed the docs/chromeos-wifi-enrollment branch from 0b3c143 to 3c51717 Compare August 2, 2026 21:55
Comment thread tutorials/connect-google-workspace-to-smallstep.mdx Outdated
5. Click **Continue**
6. Select **OpenID Connect (OIDC)** as the provider
7. Set a name, e.g. "Smallstep Google Workspace Sync"
8. Set the issuer URL to **https://container.googleapis.com/v1/projects/prod-us-central1-e5bd/locations/us-central1/clusters/primary**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any way to get a cleaner issuer URL?
(I think the answer is no, because it's a Google token and a Google URL...)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hslatman Just a half-formed thought here: would it be worth the effort or even valuable at all to have a separate GCP project that acts as issuer for this? Maybe something branded, and that can be differentiated from the prod tenant.

Comment thread tutorials/protect-wireless-networks.mdx Outdated
llewis1234 and others added 6 commits August 3, 2026 15:57
Step 14 trailed off with no actual value. Confirmed via live testing
in Google Admin: the Installation URL field is a plain textbox that
already mirrors the custom URL set in step 7, and the Update URL
dropdown in step 15 genuinely does offer "Installation URL (see
above)" as a literal option, so step 15 needed no change.

Per Carl's review comment on smallstep#545.
- Trim the redundant "not through MDM/Smallstep resources" clause.
- Trust store only needs the authority's root — ChromeOS's EAP-TLS
  handshake already includes the client intermediate.
- "No RADIUS traffic" isn't always a certificate-selection failure;
  it can also mean no device identity certificate was issued at all.

Per Herman's review comments on smallstep#546.
Homelab-specific advice from testing this setup — not realistic
guidance for enterprise customers, who won't be running their own
FreeRADIUS server. Also addresses the ambiguity Carl flagged about
whether this implied running freeradius on the Chromebook itself.

Per Carl's review comment on smallstep#546.
@llewis1234
llewis1234 force-pushed the docs/chromeos-wifi-enrollment branch from 1493482 to e10033c Compare August 3, 2026 21:04
@llewis1234

Copy link
Copy Markdown
Author

All inline feedback addressed, and Carl's directly-pushed commit ("Some suggested updates") is merged in as-is:

  • Removed the redundant "not through MDM/Smallstep resources" clause (L801)
  • Added "no cert issued at all" as a cause in the "no RADIUS traffic" troubleshooting bullet (L853)
  • Trust store guidance corrected to just the root cert, since ChromeOS's EAP-TLS handshake already includes the client intermediate (L857)
  • Completed the incomplete Installation URL sentence in step 14 — confirmed via live testing in Google Admin that step 15's "Installation URL (see above)" is a real dropdown option, so no change was needed there (L164)
  • Removed the FreeRADIUS troubleshooting tip entirely — that was homelab-specific advice from my own testing setup, not realistic guidance for enterprise customers (L848)

Two threads are intentionally left open since they're follow-up architecture questions for Herman, not doc fixes: the WIF issuer URL cleanliness question and whether the extension will eventually take over Wi-Fi/VPN config.

Still in Draft — I'll mark it ready once #545 merges, since right now its diff includes #545's changes too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants