Importing private keys via API (PKCS8)
The imports function lets you programmatically import private keys with their corresponding certificates into Next-Gen Trust Security (NGTS). This lets you import private keys and certificates so you can use the Push Provisioning feature for non-ASK certificates, and use NGTS as an enterprise vault for your machine identities.
Before attempting this import, ensure you have added your corresponding certificate chain to a trusted CA certificate. See Trusted CA Certificates in the NGTS product docs.
Before you begin
Knowledge of Data Encryption Key (DEK) encryption is a prerequisite for this API.
- Authenticate to the NGTS API. NGTS uses OAuth 2.0 machine accounts, not user API keys — see Getting started with the NGTS API to obtain a Bearer token.
- Note the following about the POST request body:
- If a value in
passwordEncryptedPrivateKeyis provided, a value indekEncryptedPasswordmust also be provided. - If a value in
dekEncryptedPrivateKeyis provided, a value indekEncryptedPasswordis not needed. passwordEncryptedPrivateKeyrefers to a PKCS #8 private key encrypted by a password.dekEncryptedPrivateKeyrefers to a PKCS #8 private key encrypted by the DEK (not by the password).- The values for
encryptionKeyIdandedgeInstanceIdmust be provided for theimportsfunction to work.
- If a value in
Private keys must be in PKCS #8 format and encrypted. Both the keys and X.509 certificates must be PEM encoded. There is a limit of 100 keys per API call; the API returns an error if you input more than 100 keys.
Import certificates and their private keys
-
Retrieve the
edgeInstanceIdandencryptionKeyIdvalues you'll need. Run theedgeinstancescall and use theidfrom theedgeinstancesobject as theedgeInstanceId:GET https://api.strata.paloaltonetworks.com/ngts/v1/edgeinstances
Authorization: Bearer <access_token> -
Use the
importsendpoint to import up to 100 private keys in a single API call:POST https://api.strata.paloaltonetworks.com/ngts/v1/certificates/imports
Authorization: Bearer <access_token>Example request
{
"edgeInstanceId": "<your edgeInstanceId>",
"encryptionKeyId": "<your encryptionKeyId>",
"importInformation": [
{
"certificate": "<pem>",
"passwordEncryptedPrivateKey": "<pem>",
"dekEncryptedPrivateKey": "<base64 encoded string>",
"dekEncryptedPassword": "BNSr0IAm9uFrCPbz78AbB/XeNBwT4h6raWX6EEuEtzuoaKRYtV3QGShQP0islB1Gnrt34XeQa5Is"
}
]
}Example response
HTTP 201 Created
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"creationDate": "2022-11-11T16:34:41.666Z"
}The response returns the job
id, which you use to check the import status below.
Check the status of the import
Use the imports API to get detailed information for each certificate and private key imported, using the import id:
GET https://api.strata.paloaltonetworks.com/ngts/v1/certificates/imports/3fa85f64-5717-4562-b3fc-2c963f66afa6
Authorization: Bearer <access_token>
Example response
HTTP 200 OK
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "PROCESSING",
"results": [
{
"certificateBytes": [
"string"
],
"serialNumber": "string",
"status": "IMPORTED_CERTIFICATE_AND_PRIVATE_KEY",
"reason": "string"
}
]
}