- It exposes an endpoint with the list of the certificate authority’s public keys.
- It exposes an endpoint that you can POST to with a public ssh key and then returns an SSH certificate that is valid for one hour.
~/.ssh/config file, such as:
platform ssh-cert:load command is fetching a new SSH certificate.
Effectively, this lets us provide a mostly transparent workflow. Our customers run their SSH commands, and Certifier
automatically grabs a new SSH certificate every time one is needed. Given that each certificate is only valid for one
hour, if a customer needs to offboard a user, we just need to ensure that Certifier is no longer delivering certificates
to that user.
Speaking of which, how does Certifier authenticate that user? It’s obviously not just blindly returning SSH certificates
to whomever is asking for one. Certifier is relying on one of the most prominent authentication technologies on the web:
OAuth2.
When a Platform.sh customer logs in or tries to SSH, they’re effectively fetching an SSH certificate while passing along
an OAuth access token that they previously obtained from our Authentication service.
Certifier uses that token to get information about the customer from the OAuth token introspection
endpoint (https://auth.api.platform.sh/oauth2/tokens).
As an example, this is what the introspection endpoint can return:
- The Universally Unique Identifier (UUID) of the user
- Whether and when the user used Multi-Factor Authentication (MFA) when logging in
- Periodically fetch the certificate authority’s certificates.
- Verify an SSH certificate coming in, trusting the metadata, such as the user’s UUID, that is in the certificate.
- The region for which the certificate was requested. If the edge layer is not on the given region, it can reject it.
- The support ticket for which the certificate was requested. The edge layer can then log it to have thorough auditing.
- There’s no need to maintain any certificate revocation lists.
- There’s no need to rely on users rotating their credentials.
- You can use your usual Single Sign On-based OAuth servers for authentication.
- You can embed a ton of authentication/authorization related metadata.