Skip to content

Commit dc07597

Browse files
authored
Merge pull request #472 from C-Mejlak/fix-alert-hydration-errors
fix: hydration error on smallstep.com
2 parents e577dd6 + 2c654d0 commit dc07597

3 files changed

Lines changed: 34 additions & 49 deletions

File tree

platform/README.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ We offer integrations for any MDMs for Apple, Windows, and ChromeOS devices that
7474
![Jamf MDM Marketecture.png](/graphics/Jamf_MDM_Marketecture.png)
7575

7676
<Alert severity="info">
77-
<div>
78-
<p><strong>💡 What about MDM’s that do not support Dynamic SCEP? </strong></p>
79-
<p>There are two main approaches to using SCEP as a certificate enrollment protocol: static and dynamic. </p>
77+
**💡 What about MDM’s that do not support Dynamic SCEP?**
78+
79+
There are two main approaches to using SCEP as a certificate enrollment protocol: static and dynamic.
8080

81-
<p>In static SCEP, a single challenge password is in every SCEP payload for every device. This practice is insecure and not recommended. Furthermore, it only shows a single user in reporting. We do not support this because we believe it's crucial to provide the most secure options for your infrastructure.</p>
82-
<p>In contrast, for Dynamic SCEP, webhooks are used to generate new challenges and unique passwords for each device, and you would be able to see reporting for all devices.</p>
83-
</div>
81+
In static SCEP, a single challenge password is in every SCEP payload for every device. This practice is insecure and not recommended. Furthermore, it only shows a single user in reporting. We do not support this because we believe it's crucial to provide the most secure options for your infrastructure.
82+
83+
In contrast, for Dynamic SCEP, webhooks are used to generate new challenges and unique passwords for each device, and you would be able to see reporting for all devices.
8484
</Alert>
8585

8686
Smallstep can also be used as a drop-in replacement for Active Directory Certificate Services (ADCS), allowing you to transition from ADCS while still serving legacy workloads. We provide backwards-compatible support for SCEP and NDES, and also let you bring your existing Root CA with you, so you can get up and running in minutes.

platform/core-concepts.mdx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,9 @@ With Smallstep, you can build a device inventory by syncing devices from your MD
5757
See our [Enrollment Guide](https://smallstep.com/docs/platform/enrollment-guide/) for details.
5858

5959
<Alert severity="info">
60-
<div>
6160
A note on BYO devices
62-
<p>
63-
BYO devices pose a privacy challenge: Unique hardware identifiers cannot not be exposed to the organization when a device is used for both personal and organizational work. But, as long as we have a continuity of device identity across interactions with BYO devices, we don’t need to use permanent hardware identifiers. Instead, cryptographically secure software identifiers—scoped to the organization—can form a foundation for policy and authentication. BYO device identifiers aren’t usable for trust bootstrapping, though. The device’s owner will need to prove possession of the device before its identity can be trusted.
64-
</p>
65-
</div>
61+
62+
BYO devices pose a privacy challenge: Unique hardware identifiers cannot not be exposed to the organization when a device is used for both personal and organizational work. But, as long as we have a continuity of device identity across interactions with BYO devices, we don’t need to use permanent hardware identifiers. Instead, cryptographically secure software identifiers—scoped to the organization—can form a foundation for policy and authentication. BYO device identifiers aren’t usable for trust bootstrapping, though. The device’s owner will need to prove possession of the device before its identity can be trusted.
6663
</Alert>
6764

6865
## Smallstep Agent
@@ -219,9 +216,7 @@ This allows a third party to prove that a specific key is stored on *a specific
219216
- Trust profile: To keep these keys safe, you’re trusting the secure element manufacturer
220217

221218
<Alert severity="info">
222-
<div>
223-
Apple platforms do not provide user-space APIs for device attestations due to privacy concerns – hardware identifiers used for attestation can be used to identify a device and correlate end-user activity across remote systems in a way that violates end-user privacy expectations. For this reason, Apple limits hardware attestations to the Managed Device Attestation (MDA) workflow, using ACME DA, which is only available to managed devices in Supervised mode.
224-
</div>
219+
Apple platforms do not provide user-space APIs for device attestations due to privacy concerns – hardware identifiers used for attestation can be used to identify a device and correlate end-user activity across remote systems in a way that violates end-user privacy expectations. For this reason, Apple limits hardware attestations to the Managed Device Attestation (MDA) workflow, using ACME DA, which is only available to managed devices in Supervised mode.
225220
</Alert>
226221

227222
### A note about provisioned credentials

step-ca/provisioners.mdx

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,10 @@ provisioner for a given workload.
100100
Use the [`step ca provisioner`](../step-cli/reference/ca/provisioner) command group to add, remove, or modify provisioner configurations. Run these commands directly on your CA machine. They need to modify the `$(step path)/config/ca.json` configuration file.
101101

102102
<Alert severity="warning">
103-
<div>
104-
<p><b>May I edit <Code>ca.json</Code> directly?</b></p>
105-
<p>You may edit your <Code>ca.json</Code> configuration file directly, but we strongly recommend using <a href="https://smallstep.com/docs/step-cli/reference/ca/provisioner"><Code>step ca provisioner</Code></a> commands instead.
106-
Fields in <Code>ca.json</Code> may be encoded differently than you expect.</p>
107-
</div>
103+
**May I edit `ca.json` directly?**
104+
105+
You may edit your `ca.json` configuration file directly, but we strongly recommend using <a href="https://smallstep.com/docs/step-cli/reference/ca/provisioner">`step ca provisioner`</a> commands instead.
106+
Fields in `ca.json` may be encoded differently than you expect.
108107
</Alert>
109108

110109
Some provisioner options override global defaults for your CA.
@@ -711,28 +710,26 @@ $ STEP_CONSOLE=true step ssh certificate carl carl.crt
711710
#### Notes
712711

713712
<Alert severity="info">
714-
<div>
715-
<b>Why is the OAuth client secret unprotected?</b>
713+
**Why is the OAuth client secret unprotected?**
716714

717-
When using the OIDC provisioner, you may notice that your OAuth client secret is visible to anyone via the CA's <Code>/provisioners</Code> API endpoint.
718-
Counterintuitively, this is a secure implementation of OAuth that conforms to the OAuth Best Current Practices for Native Apps (<a href="https://www.rfc-editor.org/rfc/rfc8252.html">RFC8252 / IETF BCP212</a>).
719-
And it is the same approach that Google's <Code>gcloud</Code> CLI tool uses for Google Cloud Platform authentication: An OAuth client secret is hardcoded into its source code.
715+
When using the OIDC provisioner, you may notice that your OAuth client secret is visible to anyone via the CA's `/provisioners` API endpoint.
716+
Counterintuitively, this is a secure implementation of OAuth that conforms to the OAuth Best Current Practices for Native Apps (<a href="https://www.rfc-editor.org/rfc/rfc8252.html">RFC8252 / IETF BCP212</a>).
717+
And it is the same approach that Google's `gcloud` CLI tool uses for Google Cloud Platform authentication: An OAuth client secret is hardcoded into its source code.
720718

721-
So, what makes it secure?
722-
The Authorization Code flow for native OAuth apps requires the redirect URI hostname be hardcoded as `127.0.0.1` (or `localhost`) in the client configuration.
723-
This constraint obviates the need for a client secret, because the loopback address is inherently resistant to network attacks that the client secret is designed to mitigate in other, non-native app flows.
719+
So, what makes it secure?
720+
The Authorization Code flow for native OAuth apps requires the redirect URI hostname be hardcoded as `127.0.0.1` (or `localhost`) in the client configuration.
721+
This constraint obviates the need for a client secret, because the loopback address is inherently resistant to network attacks that the client secret is designed to mitigate in other, non-native app flows.
724722

725-
An attacker in posession of the client secret would need local access to your device in order to compromise the flow.
726-
OAuth in general is not very resistant to local attacks, so the threat model for the native app flow with an exposed client secret is the same as with any other OAuth flow:
727-
It assumes that if you have a local attacker on your device, it's unlikely that this kind of attack is going to be your biggest threat.
723+
An attacker in posession of the client secret would need local access to your device in order to compromise the flow.
724+
OAuth in general is not very resistant to local attacks, so the threat model for the native app flow with an exposed client secret is the same as with any other OAuth flow:
725+
It assumes that if you have a local attacker on your device, it's unlikely that this kind of attack is going to be your biggest threat.
728726

729-
The client secret is superfluous in the Authorization Code flow for native apps.
730-
In fact, BCP212 has recommended that OAuth identity providers offer a special OAuth client type that has no client secret.
731-
In practice, very few OAuth providers have implemented this "secretless" approach, so we don't yet support it.
732-
Functionally, however, it is equivalent to having a public secret.
727+
The client secret is superfluous in the Authorization Code flow for native apps.
728+
In fact, BCP212 has recommended that OAuth identity providers offer a special OAuth client type that has no client secret.
729+
In practice, very few OAuth providers have implemented this "secretless" approach, so we don't yet support it.
730+
Functionally, however, it is equivalent to having a public secret.
733731

734-
Bottom line, the OAuth flow implemented in `step` and `step-ca` is widely vetted and considered secure.
735-
</div>
732+
Bottom line, the OAuth flow implemented in `step` and `step-ca` is widely vetted and considered secure.
736733
</Alert>
737734

738735
#### Further reading
@@ -748,10 +745,9 @@ It allows clients to use a different PKI to bootstrap trust.
748745
Configure this provisioner with a root CA certificate, and any certificate that chains up to that root can be used in a certificate request.
749746

750747
<Alert severity="warning">
751-
<div>
752-
<p><b>May I configure my CA's X5C provisioner accept its own root?</b></p>
753-
<p>We do not recommend it, because it will allow any user with a valid certificate from your PKI to get any kind of certificate. Configure X5C with the root of a more restricted CA, to ensure only specific people or machines can use the provisioner.</p>
754-
</div>
748+
**May I configure my CA's X5C provisioner accept its own root?**
749+
750+
We do not recommend it, because it will allow any user with a valid certificate from your PKI to get any kind of certificate. Configure X5C with the root of a more restricted CA, to ensure only specific people or machines can use the provisioner.
755751
</Alert>
756752

757753
- Clients may request an X.509 or SSH certificate
@@ -1268,12 +1264,8 @@ This operation cannot be performed using an ECDSA key.
12681264
Because [`step ca init`](../step-cli/reference/ca/init) creates an ECDSA chain by default, you will need to [convert your CA to use an RSA CA chain](../tutorials/rsa-chain.mdx) before using the SCEP provisioner.
12691265

12701266
<Alert severity="info">
1271-
<div>
1272-
<p>
1273-
<strong>Note:</strong> Some SCEP clients may fail if the intermediate CA certificate does not contain the right key usage extensions or does contain otherwise unexpected content.
1274-
Consult the documentation of your SCEP client for specific configuration required or ask us on <a href="https://u.step.sm/discord">Discord</a> or in <a href="https://github.com/smallstep/certificates/discussions">GitHub Discussions</a> if you hit a blocker.
1275-
</p>
1276-
</div>
1267+
**Note:** Some SCEP clients may fail if the intermediate CA certificate does not contain the right key usage extensions or does contain otherwise unexpected content.
1268+
Consult the documentation of your SCEP client for specific configuration required or ask us on <a href="https://u.step.sm/discord">Discord</a> or in <a href="https://github.com/smallstep/certificates/discussions">GitHub Discussions</a> if you hit a blocker.
12771269
</Alert>
12781270

12791271
#### Configure the Provisioner
@@ -1334,9 +1326,7 @@ Finally, restart `step-ca`.
13341326
Your SCEP provisioner is now available at the endpoint `http://ca.example.com:8080/scep/my_scep_provisioner`.
13351327

13361328
<Alert severity="info">
1337-
<div>
1338-
<p><strong>Note:</strong> Some SCEP clients expect a specific path segment at the end of the SCEP URL (Cisco Catalyst switches, for example). For compatibility with these clients, the SCEP provisioner is also made available at any path segment beneath the configured provisioner endpoint.</p>
1339-
</div>
1329+
**Note:** Some SCEP clients expect a specific path segment at the end of the SCEP URL (Cisco Catalyst switches, for example). For compatibility with these clients, the SCEP provisioner is also made available at any path segment beneath the configured provisioner endpoint.
13401330
</Alert>
13411331

13421332
### K8sSA - Kubernetes Service Account

0 commit comments

Comments
 (0)