docs/documentation/platform/identities/tls-cert-auth.mdx
TLS Certificate Auth is an authentication method that verifies a user's TLS Client certificate using the provided CA Certificate, allowing secure access to Infisical resources.
The following sequence diagram illustrates the TLS Certificate Auth workflow for authenticating users with Infisical.
sequenceDiagram
participant Client
participant Infisical
Note over Client,Client: Step 1: Setup your TLS request with the client certificate
Note over Client,Infisical: Step 2: Login Operation
Client->>Infisical: Send request to /api/v1/auth/tls-cert-auth/login
Note over Infisical: Step 3: Request verification using CA Certificate
Infisical->>Client: Return short-lived access token
Note over Client,Infisical: Step 5: Access Infisical API with token
Client->>Infisical: Make authenticated requests using the short-lived access token
At a high level, Infisical authenticates the client's TLS Certificate by verifying its identity and checking that it meets specific requirements (e.g., it is bound to the allowed common names) at the /api/v1/auth/tls-cert-auth/login endpoint. If successful, Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API.
To be more specific:
/api/v1/auth/tls-cert-auth/login endpoint.In the following steps, we explore how to create and use identities for your workloads and applications on TLS Certificate to access the Infisical API using request signing.
<Warning> **Self-Hosted Users:** Before using TLS Certificate Auth, please review the [Security Requirements for Self-Hosted Deployments](#security-requirements-for-self-hosted-deployments) section below to ensure proper configuration and avoid security vulnerabilities. </Warning>To create an identity, head to your Organization Settings > Access Control > Identities and press Create identity.
When creating an identity, you specify an organization-level role for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles.
Input some details for your new identity:
Once you've created an identity, you'll be redirected to a page where you can manage the identity.
Since the identity has been configured with Universal Auth by default, you should reconfigure it to use TLS Certificate Auth instead. To do this, click the cog next to Universal Auth and then select Delete in the options dropdown.
Now create a new TLS Certificate Auth Method.
Here's some information about each field:
2592000 equivalent to 30 days): The lifetime for an access token in seconds. This value will be referenced at renewal time.2592000 equivalent to 30 days): The maximum lifetime for an access token in seconds. This value will be referenced at renewal time.0): The maximum number of times that an access token can be used; a value of 0 implies an infinite number of uses.0.0.0.0/0, allowing usage from any network address.In order to allow an identity to access project-level resources such as secrets, you must add it to the relevant projects.
To do this, head over to the project you want to add the identity to and navigate to Project Settings > Access Control > Machine Identities and press Add Identity.
Select the identity you want to add to the project and the project-level role you want it to assume. The project role given to the identity will determine what project-level resources this identity can access.
To access the Infisical API as the identity, you need to send a TLS request to /api/v1/auth/tls-cert-auth/login endpoint.
Below is an example of how you can authenticate with Infisical using NodeJS.
const fs = require("fs");
const https = require("https");
const axios = require("axios");
try {
const clientCertificate = fs.readFileSync("client-cert.pem", "utf8");
const clientKeyCertificate = fs.readFileSync("client-key.pem", "utf8");
const infisicalUrl = "https://app.infisical.com:8443"; // or your self-hosted Infisical URL
const identityId = "<your-identity-id>";
// Create HTTPS agent with client certificate and key
const httpsAgent = new https.Agent({
cert: clientCertificate,
key: clientKeyCertificate,
});
const { data } = await axios.post(
`${infisicalUrl}/api/v1/auth/tls-cert-auth/login`,
{
identityId,
},
{
httpsAgent: httpsAgent, // Pass the HTTPS agent with client cert
}
);
console.log("result data: ", data); // access token here
} catch (err) {
console.error(err);
}
If an identity access token expires, it can no longer access the Infisical API. A new access token should be obtained by performing another login operation.
ALL TLS cert login requests MUST go through a load balancer/proxy that verifies certificate ownership: