2017-08-08 16:28:17 +00:00
---
2020-01-18 00:18:09 +00:00
layout: api
page_title: TLS Certificate - Auth Methods - HTTP API
sidebar_title: TLS Certificates
2017-08-08 16:28:17 +00:00
description: |-
This is the API documentation for the Vault TLS Certificate authentication
2017-09-13 01:48:52 +00:00
method.
2017-08-08 16:28:17 +00:00
---
2017-09-13 01:48:52 +00:00
# TLS Certificate Auth Method (API)
2017-08-08 16:28:17 +00:00
2017-09-13 01:48:52 +00:00
This is the API documentation for the Vault TLS Certificate authentication
method. For general information about the usage and operation of the TLS
2020-01-22 20:05:41 +00:00
Certificate method, please see the [Vault TLS Certificate method documentation](/docs/auth/cert).
2017-08-08 16:28:17 +00:00
2017-09-13 01:48:52 +00:00
This documentation assumes the TLS Certificate method is mounted at the
2017-09-21 21:14:40 +00:00
`/auth/cert` path in Vault. Since it is possible to enable auth methods at any
2017-08-08 16:28:17 +00:00
location, please update your API calls accordingly.
## Create CA Certificate Role
Sets a CA cert and associated parameters in a role name.
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :----------------------- |
| `POST` | `/auth/cert/certs/:name` |
2017-08-08 16:28:17 +00:00
### Parameters
- `name` `(string: <required>)` - The name of the certificate role.
- `certificate` `(string: <required>)` - The PEM-format CA certificate.
2018-05-25 14:39:23 +00:00
- `allowed_names` `(string: "")` - DEPRECATED: Please use the individual
`allowed_X_sans` parameters instead. Constrain the Common and Alternative
2020-01-18 00:18:09 +00:00
Names in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2017-12-18 20:29:45 +00:00
a comma-separated list of patterns. Authentication requires at least one Name
matching at least one pattern. If not set, defaults to allowing all names.
2018-05-25 14:39:23 +00:00
- `allowed_common_names` `(string: "" or array: [])` - Constrain the Common
2020-01-18 00:18:09 +00:00
Names in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2018-05-25 14:34:46 +00:00
a comma-separated list of patterns. Authentication requires at least one Name
matching at least one pattern. If not set, defaults to allowing all names.
2018-05-25 14:39:23 +00:00
- `allowed_dns_sans` `(string: "" or array: [])` - Constrain the Alternative
2020-01-18 00:18:09 +00:00
Names in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2018-05-25 14:34:46 +00:00
a comma-separated list of patterns. Authentication requires at least one DNS
matching at least one pattern. If not set, defaults to allowing all dns.
2018-05-25 14:39:23 +00:00
- `allowed_email_sans` `(string: "" or array: [])` - Constrain the Alternative
2020-01-18 00:18:09 +00:00
Names in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2018-05-25 14:39:23 +00:00
a comma-separated list of patterns. Authentication requires at least one
Email matching at least one pattern. If not set, defaults to allowing all
emails.
- `allowed_uri_sans` `(string: "" or array: [])` - Constrain the Alternative
2020-01-18 00:18:09 +00:00
Names in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2018-05-25 14:39:23 +00:00
a comma-separated list of URI patterns. Authentication requires at least one
URI matching at least one pattern. If not set, defaults to allowing all URIs.
2018-09-28 00:04:55 +00:00
- `allowed_organizational_units` `(string: "" or array: [])` - Constrain the
2020-01-18 00:18:09 +00:00
Organizational Units (OU) in the client certificate with a [globbed pattern](https://github.com/ryanuber/go-glob/blob/master/README.md#example). Value is
2018-09-28 00:04:55 +00:00
a comma-separated list of OU patterns. Authentication requires at least one
OU matching at least one pattern. If not set, defaults to allowing all OUs.
2018-05-25 14:39:23 +00:00
- `required_extensions` `(string: "" or array: [])` - Require specific Custom
Extension OIDs to exist and match the pattern. Value is a comma separated
string or array of `oid:value`. Expects the extension value to be some type
of ASN1 encoded string. All conditions _must_ be met. Supports globbing on
`value`.
2017-12-18 20:29:45 +00:00
- `display_name` `(string: "")` - The `display_name` to set on tokens issued
2017-09-13 01:48:52 +00:00
when authenticating against this CA certificate. If not set, defaults to the
2017-08-08 16:28:17 +00:00
name of the role.
2019-07-30 19:58:32 +00:00
2020-01-18 00:18:09 +00:00
@include 'partials/tokenfields.mdx'
2017-08-08 16:28:17 +00:00
### Sample Payload
```json
{
"certificate": "-----BEGIN CERTIFICATE-----\nMIIEtzCCA5+.......ZRtAfQ6r\nwlW975rYa1ZqEdA=\n-----END CERTIFICATE-----",
2018-05-09 22:39:55 +00:00
"display_name": "test",
"bound_cidrs": ["127.0.0.1/32", "128.252.0.0/16"]
2017-08-08 16:28:17 +00:00
}
```
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/certs/test-ca
2017-08-08 16:28:17 +00:00
```
## Read CA Certificate Role
Gets information associated with the named role.
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :----------------------- |
| `GET` | `/auth/cert/certs/:name` |
2017-08-08 16:28:17 +00:00
### Parameters
- `name` `(string: <required>)` - The name of the certificate role.
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/certs/test-ca
2017-08-08 16:28:17 +00:00
```
### Sample Response
```json
{
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIEtzCCA5+.......ZRtAfQ6r\nwlW975rYa1ZqEdA=\n-----END CERTIFICATE-----",
"display_name": "test",
"policies": "",
"allowed_names": "",
2017-12-18 17:53:44 +00:00
"required_extensions": "",
2017-12-18 20:29:45 +00:00
"ttl": 2764800,
"max_ttl": 2764800,
"period": 0
2017-08-08 16:28:17 +00:00
},
"warnings": null,
"auth": null
}
```
## List Certificate Roles
Lists configured certificate names.
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :----------------- |
| `LIST` | `/auth/cert/certs` |
2017-08-08 16:28:17 +00:00
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request LIST \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/certs
2018-12-12 20:27:28 +00:00
```
2017-08-08 16:28:17 +00:00
### Sample Response
```json
{
"auth": null,
"warnings": null,
"wrap_info": null,
"data": {
2020-01-18 00:18:09 +00:00
"keys": ["cert1", "cert2"]
2017-08-08 16:28:17 +00:00
},
"lease_duration": 0,
"renewable": false,
"lease_id": ""
}
```
## Delete Certificate Role
2017-09-13 01:48:52 +00:00
Deletes the named role and CA cert from the method mount.
2017-08-08 16:28:17 +00:00
2020-01-18 00:18:09 +00:00
| Method | Path |
| :------- | :----------------------- |
| `DELETE` | `/auth/cert/certs/:name` |
2017-08-08 16:28:17 +00:00
### Parameters
- `name` `(string: <required>)` - The name of the certificate role.
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request DELETE \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/certs/cert1
2017-08-08 16:28:17 +00:00
```
## Create CRL
Sets a named CRL.
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :---------------------- |
| `POST` | `/auth/cert/crls/:name` |
2017-08-08 16:28:17 +00:00
2017-09-13 01:48:52 +00:00
### Parameters
2017-08-08 16:28:17 +00:00
- `name` `(string: <required>)` - The name of the CRL.
- `crl` `(string: <required>)` - The PEM format CRL.
### Sample Payload
```json
{
"crl": "-----BEGIN X509 CRL-----\n...\n-----END X509 CRL-----"
}
```
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
2019-04-19 05:20:46 +00:00
--data @payload.json \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/crls/custom-crl
2017-08-08 16:28:17 +00:00
```
## Read CRL
Gets information associated with the named CRL (currently, the serial
2020-01-18 00:18:09 +00:00
numbers contained within). As the serials can be integers up to an
2017-08-08 16:28:17 +00:00
arbitrary size, these are returned as strings.
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :---------------------- |
| `GET` | `/auth/cert/crls/:name` |
2017-08-08 16:28:17 +00:00
### Parameters
- `name` `(string: <required>)` - The name of the CRL.
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/crls/custom-crl
2017-08-08 16:28:17 +00:00
```
### Sample Response
```json
{
"auth": null,
"data": {
"serials": {
"13": {}
}
},
"lease_duration": 0,
"lease_id": "",
"renewable": false,
"warnings": null
}
```
2017-09-07 14:28:14 +00:00
## Delete CRL
2017-08-08 16:28:17 +00:00
2017-09-13 01:48:52 +00:00
Deletes the named CRL from the auth method mount.
2017-08-08 16:28:17 +00:00
2020-01-18 00:18:09 +00:00
| Method | Path |
| :------- | :---------------------- |
| `DELETE` | `/auth/cert/crls/:name` |
2017-08-08 16:28:17 +00:00
### Parameters
- `name` `(string: <required>)` - The name of the CRL.
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request DELETE \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/crls/cert1
2017-08-08 16:28:17 +00:00
```
2017-09-13 01:48:52 +00:00
## Configure TLS Certificate Method
2017-08-08 16:28:17 +00:00
2017-09-13 01:48:52 +00:00
Configuration options for the method.
2017-08-08 16:28:17 +00:00
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :------------------ |
| `POST` | `/auth/cert/config` |
2017-08-08 16:28:17 +00:00
### Parameters
- `disable_binding` `(boolean: false)` - If set, during renewal, skips the
matching of presented client identity with the client identity used during
2017-09-13 01:48:52 +00:00
login.
2017-08-08 16:28:17 +00:00
### Sample Payload
```json
{
"disable_binding": true
}
```
### Sample Request
```
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
2019-04-19 05:20:46 +00:00
--data @payload.json \
2018-03-23 15:41:51 +00:00
http://127.0.0.1:8200/v1/auth/cert/certs/cert1
2017-08-08 16:28:17 +00:00
```
2018-01-15 20:52:41 +00:00
## Login with TLS Certificate Method
2017-08-08 16:28:17 +00:00
Log in and fetch a token. If there is a valid chain to a CA configured in the
2018-02-16 22:42:29 +00:00
method and all role constraints are matched, a token will be issued. If the
certificate has DNS SANs in it, each of those will be verified. If Common Name
is required to be verified, then it should be a fully qualified DNS domain name
and must be duplicated as a DNS SAN (see
https://tools.ietf.org/html/rfc6125#section-2.3)
2017-08-08 16:28:17 +00:00
2020-01-18 00:18:09 +00:00
| Method | Path |
| :----- | :----------------- |
| `POST` | `/auth/cert/login` |
2017-08-08 16:28:17 +00:00
### Parameters
2017-09-13 01:48:52 +00:00
- `name` `(string: "")` - Authenticate against only the named certificate role,
2017-08-08 16:28:17 +00:00
returning its policy list if successful. If not set, defaults to trying all
certificate roles and returning any one that matches.
### Sample Payload
```json
{
"name": "cert1"
}
```
### Sample Request
```
$ curl \
--request POST \
2019-07-05 22:36:20 +00:00
--cert cert.pem \
--key key.pem \
2019-04-19 05:20:46 +00:00
--data @payload.json \
2019-06-27 15:04:09 +00:00
https://127.0.0.1:8200/v1/auth/cert/login
2017-08-08 16:28:17 +00:00
```
### Sample Response
```json
{
"auth": {
"client_token": "cf95f87d-f95b-47ff-b1f5-ba7bff850425",
2020-01-18 00:18:09 +00:00
"policies": ["web", "stage"],
2017-08-08 16:28:17 +00:00
"lease_duration": 3600,
2020-01-18 00:18:09 +00:00
"renewable": true
2017-08-08 16:28:17 +00:00
}
}
2017-09-13 01:48:52 +00:00
```