layout | page_title | sidebar_title | description |
---|---|---|---|
api |
GlobalSign Atlas- Secrets Engines - HTTP API |
Atlas |
This is the API documentation for the Vault GlobalSign Atlas secrets engine. |
This is the API documentation for the Vault GlobalSign Atlas secrets engine. For general information about the usage and operation of the GlobalSign Atlas secrets engine, please see the Getting Started Guide.
This documentation assumes the Atlas secrets engine is enabled at the /atlas
path
in Vault. Since it is possible to enable secrets engines at any location, please
update your API calls accordingly.
During plugin mounting you can specify the following override options.
Name | Type | Description |
---|---|---|
OverrideSignatureAlgorithm | String | The Signature algorithm to have the atlas CA use for all issued certificates |
OverrideSignatureHashAlgorithm | String | The Signature hash algorithm to have the atlas CA use for all issued certificates |
OverrideDisableKeyUsageExtensions | Bool | Disables sending Key Usage extensions to atlas, useful for when your account has a static value on the atlas backend. |
- Configure Atlas Authentication
- Read CA Certificate
- Read CA Certificate Chain
- Read Certificate
- List Certificates
- Generate Certificate
- Revoke Certificate
- Create/Update Role
- Read Role
- List Roles
- Delete Role
- Sign Certificate
- Tidy
This endpoint configures the Vaults connection to your GlobalSign Atlas account. It requires mTLS and API credentials provided by your account manager. These credentials will be persisted in your vault cluster so you will only need to provide them once.
Method | Path |
---|---|
POST |
/atlas/config/authn |
api_key
(string: <required>)
– Your GlobalSign Atlas API Key.api_secret
(string: <required>)
– Your GlobalSign Atlas API Secret.api_cert
(string: <required>)
– Your GlobalSign Atlas mTLS Client Certificate, the content being PEM that has been base64 encoded.api_cert_key
(string: <required>)
– Your GlobalSign Atlas mTLS Client Certificate's Private Key, the content being PEM that has been base64 encoded.
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/atlas/config/authn
You will get a HTTP 201 response with no body.
This endpoint retrieves the CA certificate chain, including the CA in PEM
format. This is a bare endpoint that does not return a standard Vault data
structure and cannot be read by the Vault CLI; use /atlas/cert
for that.
This is an unauthenticated endpoint.
Method | Path |
---|---|
GET |
/atlas/ca_chain |
$ curl \
http://127.0.0.1:8200/v1/atlas/ca_chain
<PEM-encoded certificate chain>
This endpoint retrieves the CA certificate in raw DER-encoded form. This is a
bare endpoint that does not return a standard Vault data structure and cannot
be read by the Vault CLI; use /atlas/cert
for that. If /pem
is added to the
endpoint, the CA certificate is returned in PEM format.
This is an unauthenticated endpoint.
Method | Path |
---|---|
GET |
/atlas/ca(/pem) |
$ curl \
http://127.0.0.1:8200/v1/atlas/ca/pem
<binary DER-encoded certificate>
This endpoint retrieves the CA certificate chain, including the CA in PEM
format. This is a bare endpoint that does not return a standard Vault data
structure and cannot be read by the Vault CLI; use /atlas/cert
for that.
This is an unauthenticated endpoint.
Method | Path |
---|---|
GET |
/atlas/ca_chain |
$ curl \
http://127.0.0.1:8200/v1/atlas/ca_chain
<PEM-encoded certificate chain>
This endpoint retrieves one of a selection of certificates. This endpoint returns the certificate in PEM formatting in the
certificate
key of the JSON object, which is a standard Vault response that is readable by the Vault CLI.
This is an unauthenticated endpoint.
Method | Path |
---|---|
GET |
/atlas/cert/:serial |
-
serial
(string: <required>)
– Specifies the serial of the key to read. This is part of the request URL. Valid values forserial
are:<serial>
for the certificate with the given serial numberca
for the CA certificateca_chain
for the CA trust chain or a serial number in either hyphen-separated or colon-separated octal format
$ curl \
http://127.0.0.1:8200/v1/atlas/cert/ca
{
"data": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIGmDCCBYCgAwIBAgIHBzEB3fTzhTANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UE\n..."
}
}
This endpoint returns a list of the current certificates by serial number only.
Method | Path |
---|---|
LIST |
/atlas/certs |
$ curl \
--header "X-Vault-Token: ..." \
--request LIST \
http://127.0.0.1:8200/v1/atlas/certs
{
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": {
"keys": [
"17:67:16:b0:b9:45:58:c0:3a:29:e3:cb:d6:98:33:7a:a6:3b:66:c1",
"26:0f:76:93:73:cb:3f:a0:7a:ff:97:85:42:48:3a:aa:e5:96:03:21"
]
},
"wrap_info": null,
"warnings": null,
"auth": null
}
This endpoint generates a new set of credentials (private key and certificate) based on the role named in the endpoint. The issuing CA certificate is returned as well, so that only the root CA need be in a client's trust store.
The private key is not stored. If you do not save the private key, you will need to request a new certificate.
Method | Path |
---|---|
POST |
/atlas/issue/:name |
-
name
(string: <required>)
– Specifies the name of the role to create the certificate against. This is part of the request URL. -
common_name
(string: <required>)
– Specifies the requested CN for the certificate. If the CN is allowed by role policy, it will be issued. -
alt_names
(string: "")
– Specifies requested Subject Alternative Names, in a comma-delimited list. These can be host names or email addresses; they will be parsed into their respective fields. If any requested names do not match role policy, the entire request will be denied. -
ip_sans
(string: "")
– Specifies requested IP Subject Alternative Names, in a comma-delimited list. Only valid if the role allows IP SANs (which is the default). -
uri_sans
(string: "")
– Specifies the requested URI Subject Alternative Names, in a comma-delimited list. -
other_sans
(string: "")
– Specifies custom OID/UTF8-string SANs. These must match values specified on the role inallowed_other_sans
(see role creation for allowed_other_sans globbing rules). The format is the same as OpenSSL:<oid>;<type>:<value>
where the only current valid type isUTF8
. This can be a comma-delimited list or a JSON string slice. -
ttl
(string: "")
– Specifies requested Time To Live. Cannot be greater than the role'smax_ttl
value. If not provided, the role'sttl
value will be used. Note that the role values default to system values if not explicitly set. -
format
(string: "")
– Specifies the format for returned data. Can bepem
,der
, orpem_bundle
; defaults topem
. Ifder
, the output is base64 encoded. Ifpem_bundle
, thecertificate
field will contain the private key and certificate, concatenated; if the issuing CA is not a Vault-derived self-signed root, this will be included as well. -
private_key_format
(string: "")
– Specifies the format for marshaling the private key. Defaults toder
which will return either base64-encoded DER or PEM-encoded DER, depending on the value offormat
. The other option ispkcs8
which will return the key marshalled as PEM-encoded PKCS8. -
exclude_cn_from_sans
(bool: false)
– If true, the givencommon_name
will not be included in DNS or Email Subject Alternate Names (as appropriate). Useful if the CN is not a hostname or email address, but is instead some human-readable identifier.
{
"common_name": "www.example.com"
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/atlas/issue/my-role
{
"lease_id": "atas/issue/test/7ad6cfa5-f04f-c62a-d477-f33210475d05",
"renewable": false,
"lease_duration": 21600,
"data": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDzDCCAragAwIBAgIUOd0ukLcjH43TfTHFG9qE0FtlMVgwCwYJKoZIhvcNAQEL\n...\numkqeYeO30g1uYvDuWLXVA==\n-----END CERTIFICATE-----\n",
"issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIJAKM+z4MSfw2mMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\n...\nG/7g4koczXLoUM3OQXd5Aq2cs4SS1vODrYmgbioFsQ3eDHd1fg==\n-----END CERTIFICATE-----\n",
"ca_chain": [
"-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIJAKM+z4MSfw2mMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\n...\nG/7g4koczXLoUM3OQXd5Aq2cs4SS1vODrYmgbioFsQ3eDHd1fg==\n-----END CERTIFICATE-----\n"
],
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAnVHfwoKsUG1GDVyWB1AFroaKl2ImMBO8EnvGLRrmobIkQvh+\n...\nQN351pgTphi6nlCkGPzkDuwvtxSxiCWXQcaxrHAL7MiJpPzkIBq1\n-----END RSA PRIVATE KEY-----\n",
"private_key_type": "rsa",
"serial_number": "39:dd:2e:90:b7:23:1f:8d:d3:7d:31:c5:1b:da:84:d0:5b:65:31:58"
},
"warnings": "",
"auth": null
}
This endpoint revokes a certificate using its serial number. This is an alternative option to the standard method of revoking using Vault lease IDs. A revocation will update your Atlas CRL.
Method | Path |
---|---|
POST |
/atlas/revoke |
serial_number
(string: <required>)
– Specifies the serial number of the certificate to revoke, in hyphen-separated or colon-separated octal.
{
"serial_number": "39:dd:2e..."
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/atlas/revoke
{
"data": {
"revocation_time": 1433269787
}
}
This endpoint creates or updates the role definition. Note that the
allowed_domains
, allow_subdomains
, allow_glob_domains
, and
allow_any_name
attributes are additive; between them nearly and across
multiple roles nearly any issuing policy can be accommodated. server_flag
,
client_flag
, and code_signing_flag
are additive as well. If a client
requests a certificate that is not allowed by the CN policy in the role, the
request is denied.
-> NOTICE: Roles are enforced within the Vault, your Atlas Instance roles that are more permissive than your Atlas Instance may still result in certificate requests being rejected.
Method | Path |
---|---|
POST |
/atlas/roles/:name |
-
name
(string: <required>)
– Specifies the name of the role to create. This is part of the request URL. -
ttl
(string: "")
– Specifies the Time To Live value provided as a string duration with time suffix. Hour is the largest suffix. If not set, uses the system default value or the value ofmax_ttl
, whichever is shorter. -
max_ttl
(string: "")
– Specifies the maximum Time To Live provided as a string duration with time suffix. Hour is the largest suffix. If not set, defaults to the system maximum lease TTL. -
allow_localhost
(bool: true)
– Specifies if clients can request certificates forlocalhost
as one of the requested common names. This is useful for testing and to allow clients on a single host to talk securely. -
allowed_domains
(list: [])
– Specifies the domains of the role. This is used with theallow_bare_domains
andallow_subdomains
options. -
allowed_domains_template
()bool: false)
– When set,allowed_domains
may contain templates, as with ACL Path Templating. -
allow_bare_domains
(bool: false)
– Specifies if clients can request certificates matching the value of the actual domains themselves; e.g. if a configured domain set withallowed_domains
isexample.com
, this allows clients to actually request a certificate containing the nameexample.com
as one of the DNS values on the final certificate. In some scenarios, this can be considered a security risk. -
allow_subdomains
(bool: false)
– Specifies if clients can request certificates with CNs that are subdomains of the CNs allowed by the other role options. This includes wildcard subdomains. For example, anallowed_domains
value ofexample.com
with this option set to true will allowfoo.example.com
andbar.example.com
as well as*.example.com
. This is redundant when using theallow_any_name
option. -
allow_glob_domains
(bool: false)
- Allows names specified inallowed_domains
to contain glob patterns (e.g.ftp*.example.com
). Clients will be allowed to request certificates with names matching the glob patterns. -
allow_any_name
(bool: false)
– Specifies if clients can request any CN. Useful in some circumstances, but make sure you understand whether it is appropriate for your installation before enabling it. -
enforce_hostnames
(bool: true)
– Specifies if only valid host names are allowed for CNs, DNS SANs, and the host part of email addresses. -
allow_ip_sans
(bool: true)
– Specifies if clients can request IP Subject Alternative Names. No authorization checking is performed except to verify that the given values are valid IP addresses. -
allowed_uri_sans
(string: "")
- Defines allowed URI Subject Alternative Names. No authorization checking is performed except to verify that the given values are valid URIs. This can be a comma-delimited list or a JSON string slice. Values can contain glob patterns (e.g.spiffe://hostname/*
). -
allowed_other_sans
(string: "")
– Defines allowed custom OID/UTF8-string SANs. This can be a comma-delimited list or a JSON string slice, where each element has the same format as OpenSSL:<oid>;<type>:<value>
, but the only valid type isUTF8
orUTF-8
. Thevalue
part of an element may be a*
to allow any value with that OID. Alternatively, specifying a single*
will allow anyother_sans
input. -
server_flag
(bool: true)
– Specifies if certificates are flagged for server use. -
client_flag
(bool: true)
– Specifies if certificates are flagged for client use. -
code_signing_flag
(bool: false)
– Specifies if certificates are flagged for code signing use. -
email_protection_flag
(bool: false)
– Specifies if certificates are flagged for email protection use. -
key_type
(string: "rsa")
– Specifies the type of key to generate for generated private keys and the type of key expected for submitted CSRs. Currently,rsa
andec
are supported, or when signing CSRsany
can be specified to allow keys of either type and with any bit size (subject to > 1024 bits for RSA keys). -
key_bits
(int: 2048)
– Specifies the number of bits to use for the generated keys. This will need to be changed forec
keys, e.g., 224, 256, 384 or 521. -
key_usage
(list: ["DigitalSignature", "KeyAgreement", "KeyEncipherment"])
– Specifies the allowed key usage constraint on issued certificates. Valid values can be found at https://golang.org/pkg/crypto/x509/#KeyUsage - simply drop theKeyUsage
part of the value. Values are not case-sensitive. To specify no key usage constraints, set this to an empty list. -
ext_key_usage
(list: [])
– Specifies the allowed extended key usage constraint on issued certificates. Valid values can be found at https://golang.org/pkg/crypto/x509/#ExtKeyUsage - simply drop theExtKeyUsage
part of the value. Values are not case-sensitive. To specify no key usage constraints, set this to an empty list. -
ext_key_usage_oids
(string: "")
- A comma-separated string or list of extended key usage oids. -
use_csr_common_name
(bool: true)
– When used with the CSR signing endpoint, the common name in the CSR will be used instead of taken from the JSON data. This doesnot
include any requested SANs in the CSR; useuse_csr_sans
for that. -
use_csr_sans
(bool: true)
– When used with the CSR signing endpoint, the subject alternate names in the CSR will be used instead of taken from the JSON data. This doesnot
include the common name in the CSR; useuse_csr_common_name
for that. -
ou
(string: "")
– Specifies the OU (OrganizationalUnit) values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
organization
(string: "")
– Specifies the O (Organization) values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
country
(string: "")
– Specifies the C (Country) values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
locality
(string: "")
– Specifies the L (Locality) values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
province
(string: "")
– Specifies the ST (Province) values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
street_address
(string: "")
– Specifies the Street Address values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
postal_code
(string: "")
– Specifies the Postal Code values in the subject field of issued certificates. This is a comma-separated string or JSON array. -
serial_number
(string: "")
– Specifies the Serial Number, if any. Otherwise Vault will generate a random serial for you. If you want more than one, specify alternative names in the alt_names map using OID 2.5.4.5. -
generate_lease
(bool: false)
– Specifies if certificates issued/signed against this role will have Vault leases attached to them. Certificates can be added to the CRL byvault revoke <lease_id>
when certificates are associated with leases. It can also be done using theatas/revoke
endpoint. However, when lease generation is disabled, invokingatas/revoke
would be the only way to add the certificates to the CRL. -
no_store
(bool: false)
– If set, certificates issued/signed against this role will not be stored in the storage backend. This can improve performance when issuing large numbers of certificates. However, certificates issued in this way cannot be enumerated or revoked, so this option is recommended only for certificates that are non-sensitive, or extremely short-lived. This option implies a value offalse
forgenerate_lease
. -
require_cn
(bool: true)
- If set to false, makes thecommon_name
field optional while generating a certificate. -
policy_identifiers
(list: [])
– A comma-separated string or list of policy OIDs. -
basic_constraints_valid_for_non_ca
(bool: false)
- Mark Basic Constraints valid when issuing non-CA certificates. -
not_before_duration
(duration: "30s")
– Specifies the duration by which to backdate the NotBefore property.
{
"allowed_domains": ["example.com"],
"allow_subdomains": true
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/atlas/roles/my-role
This endpoint queries the role definition.
Method | Path |
---|---|
GET |
/atlas/roles/:name |
name
(string: <required>)
– Specifies the name of the role to read. This is part of the request URL.
$ curl \
--header "X-Vault-Token: ..." \
http://127.0.0.1:8200/v1/atlas/roles/my-role
{
"data": {
"allow_any_name": false,
"allow_ip_sans": true,
"allow_localhost": true,
"allow_subdomains": false,
"allowed_domains": ["example.com", "foobar.com"],
"allowed_uri_sans": ["example.com", "spiffe://*"],
"allowed_other_sans": [
"1.3.6.1.4.1.311.20.2.3;utf8:[email protected]",
"1.3.6.1.4.1.311.20.2.4;UTF-8:*"
],
"client_flag": true,
"code_signing_flag": false,
"key_bits": 2048,
"key_type": "rsa",
"ttl": "6h",
"max_ttl": "12h",
"server_flag": true
}
}
This endpoint returns a list of available roles. Only the role names are returned, not any values.
Method | Path |
---|---|
LIST |
/atlas/roles |
$ curl \
--header "X-Vault-Token: ..." \
--request LIST \
http://127.0.0.1:8200/v1/atlas/roles
{
"auth": null,
"data": {
"keys": ["dev", "prod"]
},
"lease_duration": 2764800,
"lease_id": "",
"renewable": false
}
This endpoint deletes the role definition. Deleting a role does not revoke certificates previously issued under this role.
Method | Path |
---|---|
DELETE |
/atlas/roles/:name |
name
(string: <required>)
– Specifies the name of the role to delete. This is part of the request URL.
$ curl \
--header "X-Vault-Token: ..." \
--request DELETE \
http://127.0.0.1:8200/v1/atlas/roles/my-role
This endpoint signs a new certificate based upon the provided CSR and the supplied parameters, subject to the restrictions contained in the role named in the endpoint. The issuing CA certificate is returned as well, so that only the Atlas root CA need be in a client's trust store.
Method | Path |
---|---|
POST |
/atlas/sign/:name |
-
csr
(string: <required>)
– Specifies the PEM-encoded CSR. -
common_name
(string: <required>)
– Specifies the requested CN for the certificate. If the CN is allowed by role policy, it will be issued. -
alt_names
(string: "")
– Specifies the requested Subject Alternative Names, in a comma-delimited list. These can be host names or email addresses; they will be parsed into their respective fields. If any requested names do not match role policy, the entire request will be denied. -
other_sans
(string: "")
– Specifies custom OID/UTF8-string SANs. These must match values specified on the role inallowed_other_sans
(see role creation for allowed_other_sans globbing rules). The format is the same as OpenSSL:<oid>;<type>:<value>
where the only current valid type isUTF8
. This can be a comma-delimited list or a JSON string slice. -
ip_sans
(string: "")
– Specifies the requested IP Subject Alternative Names, in a comma-delimited list. Only valid if the role allows IP SANs (which is the default). -
uri_sans
(string: "")
– Specifies the requested URI Subject Alternative Names, in a comma-delimited list. If any requested URIs do not match role policy, the entire request will be denied. -
ttl
(string: "")
– Specifies the requested Time To Live. Cannot be greater than the role'smax_ttl
value. If not provided, the role'sttl
value will be used. Note that the role values default to system values if not explicitly set. -
format
(string: "pem")
– Specifies the format for returned data. Can bepem
,der
, orpem_bundle
. Ifder
, the output is base64 encoded. Ifpem_bundle
, thecertificate
field will contain the certificate and, if the issuing CA is not a Vault-derived self-signed root, it will be concatenated with the certificate. -
exclude_cn_from_sans
(bool: false)
– If set, the givencommon_name
will not be included in DNS or Email Subject Alternate Names (as appropriate). Useful if the CN is not a hostname or email address, but is instead some human-readable identifier.
{
"csr": "...",
"common_name": "example.com"
}
{
"lease_id": "atas/sign/test/7ad6cfa5-f04f-c62a-d477-f33210475d05",
"renewable": false,
"lease_duration": 21600,
"data": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDzDCCAragAwIBAgIUOd0ukLcjH43TfTHFG9qE0FtlMVgwCwYJKoZIhvcNAQEL\n...\numkqeYeO30g1uYvDuWLXVA==\n-----END CERTIFICATE-----\n",
"issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIJAKM+z4MSfw2mMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\n...\nG/7g4koczXLoUM3OQXd5Aq2cs4SS1vODrYmgbioFsQ3eDHd1fg==\n-----END CERTIFICATE-----\n",
"ca_chain": [
"-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIJAKM+z4MSfw2mMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\n...\nG/7g4koczXLoUM3OQXd5Aq2cs4SS1vODrYmgbioFsQ3eDHd1fg==\n-----END CERTIFICATE-----\n"
],
"serial_number": "39:dd:2e:90:b7:23:1f:8d:d3:7d:31:c5:1b:da:84:d0:5b:65:31:58"
},
"auth": null
}
This endpoint allows tidying up the storage backend and by removing certificates that have expired and are past a certain buffer period beyond their expiration time.
Method | Path |
---|---|
POST |
/atlas/tidy |
-
tidy_cert_store
(bool: false)
Specifies whether to tidy up the certificate store. -
tidy_revoked_certs
(bool: false)
Set to true to expire all revoked and expired certificates, removing them both from the CRL and from storage. The CRL will be rotated if this causes any values to be removed. -
safety_buffer
(string: "")
Specifies A duration (given as an integer number of seconds or a string; defaults to72h
) used as a safety buffer to ensure certificates are not expunged prematurely; as an example, this can keep certificates from being removed from the CRL that, due to clock skew, might still be considered valid on other hosts. For a certificate to be expunged, the time must be after the expiration time of the certificate (according to the local clock) plus the duration ofsafety_buffer
.
{
"safety_buffer": "24h"
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/atlas/tidy