Surveiller et gérer la création de certificats

S’applique à : Azure

Scénarios/Opérations décrits dans cet article :

  • Demander un certificat Key Vault avec un émetteur pris en charge
  • Obtenir une demande en attente : état de la demande « inProgress »
  • Obtenir une demande en attente : état de la demande « complete »
  • Obtenir une demande en attente : état de la demande en attente « canceled » ou « failed »
  • Obtenir une demande en attente : état de la demande en attente « deleted » ou « overwritten »
  • Créer (ou importer) lorsqu’une demande en attente existe : état « inProgress »
  • Procéder à une fusion lorsqu’une demande en attente est créée avec un émetteur (DigiCert, par exemple)
  • Demander une annulation alors que l’état de la demande en attente est « inProgress »
  • Supprimer un objet de demande en attente
  • Créer manuellement un certificat Key Vault
  • Procéder à une fusion lors de la création d’une demande en attente : création manuelle d’un certificat

Demander un certificat Key Vault avec un émetteur pris en charge

Méthode URI de demande
POST https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version}

Les exemples suivants nécessitent qu’un objet nommé « mydigicert » soit déjà disponible dans votre coffre de clés, le fournisseur de l’émetteur étant DigiCert. L’émetteur du certificat est une entité représentée dans Azure Key Vault (KV) en tant que ressource CertificateIssuer. Il est utilisé pour fournir des informations sur la source d’un certificat KV, le nom de l’émetteur, le fournisseur, les informations d’identification et d’autres détails administratifs.

Requête

{
  "policy": {
    "x509_props": {
      "subject": "CN=MyCertSubject1"
    },
    "issuer": {
      "name": "mydigicert",
      "cty": "OV-SSL",
    }
  }
}

response

StatusCode: 202, ReasonPhrase: 'Accepted'
Location: “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "mydigicert"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": false,
  "status": "InProgress",
  "status_details": "Pending certificate created. Certificate request is in progress. This may take some time based on the issuer provider. Please check again later",
  "request_id": "a76827a18b63421c917da80f28e9913d"
}

Obtenir une demande en attente : état de la demande « inProgress »

Méthode URI de demande
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Requête

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

Notes

Si l’élément request_id est spécifié dans la requête, il fait office de filtre. Si les éléments request_id de la requête et de l’objet en attente sont différents, un code d’état HTTP 404 est retourné.

response

StatusCode: 200, ReasonPhrase: 'OK'
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "{issuer-name}"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": false,
  "status": "inProgress",
  "status_details": "…",
  "request_id": "a76827a18b63421c917da80f28e9913d"
}

Obtenir une demande en attente : état de la demande « complete »

Requête

Méthode URI de demande
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

response

StatusCode: 200, ReasonPhrase: 'OK'
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "{issuer-name}"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": false,
  "status": "completed",
  "request_id": "a76827a18b63421c917da80f28e9913d",
  "target": “https://mykeyvault.vault.azure.net/certificates/mycert1?api-version={api-version}"
}

Obtenir une demande en attente : état de la demande en attente « canceled » ou « failed »

Requête

Méthode URI de demande
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

response

StatusCode: 200, ReasonPhrase: 'OK'
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "{issuer-name}"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": false,
  "status": "failed",
  "status_details": "",
  "request_id": "a76827a18b63421c917da80f28e9913d",
  "error": {
    "code": "<errorcode>",
    "message": "<message>"
  }
}

Notes

la valeur errorcode peut être « Certificate issuer error » (Erreur de l’émetteur de certificat) ou « Request rejected » (Demande rejetée) selon que l’erreur relève de l’émetteur ou de l’utilisateur.

Obtenir une demande en attente : état de la demande en attente « deleted » ou « overwritten »

Un objet en attente peut être supprimé ou remplacé par une opération de création/importation quand son état n’est pas inProgress.

Méthode URI de demande
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Requête

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

response

StatusCode: 404, ReasonPhrase: 'Not Found'
{
  "error": {
    "code": "PendingCertificateNotFound",
    "message": "…"
  }
}

Créer (ou importer) lorsqu’une demande en attente existe : état « inProgress »

Quatre états sont possibles pour un objet en attente : « inprogress », « canceled », « failed » ou « completed ».

Si l’état d’une demande en attente est « inprogress », les opérations de création (et d’importation) échouent avec un code d’état HTTP 409 (conflit).

Pour résoudre un conflit :

  • Si le certificat Key Vault est créé manuellement, vous pouvez terminer sa création en effectuant une fusion ou une suppression de l’objet en attente.

  • Si le certificat est créé avec un émetteur, vous pouvez patienter jusqu’à son achèvement, son échec ou son annulation. Vous pouvez également supprimer l’objet en attente.

Notes

La suppression d’un objet en attente peut ou non annuler la demande de certificat X509 auprès du fournisseur.

Méthode URI de demande
POST https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version}

Requête

{
  "policy": {
    "x509_props": {
      "subject": "CN=MyCertSubject1"
    },
    "issuer": {
      "name": "mydigicert"
    }
  }
}

response

StatusCode: 409, ReasonPhrase: 'Conflict'
{
  "error": {
    "code": "Forbidden",
    "message": "A new key vault certificate can not be created or imported while a pending key vault certificate's status is inProgress."
  }
}

Procéder à une fusion lorsqu’une demande en attente est créée avec un émetteur

La fusion n’est pas autorisée quand un objet en attente est créé avec un émetteur, mais elle l’est quand son état est inProgress.

Si la demande de création du certificat X509 échoue ou est annulée pour une raison quelconque et si un certificat X509 peut être récupéré par des moyens hors bande, une opération de fusion peut être effectuée pour terminer la création du certificat Key Vault.

Méthode URI de demande
POST https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version}

Requête

{
  "x5c": [ "MIICxTCCAbi………………………trimmed for brevitiy……………………………………………EPAQj8=" ]
}

response

StatusCode: 403, ReasonPhrase: 'Forbidden'
{
  "error": {
    "code": "Forbidden",
    "message": "Merge is forbidden on pending object created with issuer : <issuer-name> while it is in progess."
  }
}

Demander une annulation alors que l’état de la demande en attente est « inProgress »

Une annulation peut uniquement être demandée. Une demande peut ou non être annulée. Si une demande n’est pas dans l’état « inProgress », l’état HTTP 400 (demande incorrecte) est retourné.

Méthode URI de demande
PATCH https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Requête

PATCH “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

PATCH “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

{
  "cancellation_requested": true
}

response

StatusCode: 200, ReasonPhrase: 'OK'
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "{issuer-name}"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": true,
  "status": "inProgress",
  "status_details": "…",
  "request_id": "a76827a18b63421c917da80f28e9913d"
}

Supprimer un objet de demande en attente

Notes

La suppression de l’objet en attente peut ou non annuler la demande de certificat X509 auprès du fournisseur.

Méthode URI de demande
Suppression https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Requête

DELETE “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"

OR

DELETE “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"

response

StatusCode: 200, ReasonPhrase: 'OK'
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "{issuer-name}"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "cancellation_requested": false,
  "status": "inProgress",
  "request_id": "a76827a18b63421c917da80f28e9913d",
}

Créer manuellement un certificat Key Vault

Vous pouvez créer un certificat émis par une autorité de certification de votre choix via un processus de création manuelle. Définissez le nom de l’émetteur sur « Unknown » ou ne spécifiez pas le champ de l’émetteur.

Méthode URI de demande
POST https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version}

Requête

{
  "policy": {
    "x509_props": {
      "subject": "CN=MyCertSubject1"
    },
    "issuer": {
      "name": "Unknown"
    }
  }
}

response

StatusCode: 202, ReasonPhrase: 'Accepted'
Location: “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
{
  "id": “https://mykeyvault.vault.azure.net/certificates/mycert1/pending",
  "issuer": {
    "name": "Unknown"
  },
  "csr": "MIICq......DD5Lp5cqXg==",
  "status": "inProgress",
  "status_details": "Pending certificate created. Please Perform Merge to complete the request.",
  "request_id": "a76827a18b63421c917da80f28e9913d"
}

Procéder à une fusion lors de la création d’une demande en attente : création manuelle d’un certificat

Méthode URI de demande
POST https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version}

Requête

{
  "x5c": [ "MIICxTCCAbi………………………trimmed for brevitiy……………………………………………EPAQj8=" ]
}

Nom de l'élément Obligatoire Type Version Description
x5c Oui tableau <présentation de la version> Chaîne d’approbation X509 en tant que table de chaînes en base 64.

response

StatusCode: 201, ReasonPhrase: 'Created'
Location: “https://mykeyvault.vault.azure.net/certificates/mycert1?api-version={api-version}"
{
	"id": "https mykeyvault.vault.azure.net/certificates/mycert1/f366e1a9dd774288ad84a45a5f620352",
	"kid": "https:// mykeyvault.vault.azure.net/keys/mycert1/f366e1a9dd774288ad84a45a5f620352",
	"sid": " mykeyvault.vault.azure.net/secrets/mycert1/f366e1a9dd774288ad84a45a5f620352",
	"cer": "……de34534……",
	"x5t": "n14q2wbvyXr71Pcb58NivuiwJKk",
	"attributes": {
		"enabled": true,
		"exp": 1530394215,
		"nbf": 1435699215,
		"created": 1435699919,
		"updated": 1435699919
	},
	"pending": {
		"id": "https:// mykeyvault.vault.azure.net/certificates/mycert1/pending"
	},
	"policy": {
		"id": "https:// mykeyvault.vault.azure.net/certificates/mycert1/policy",
		"key_props": {
			"exportable": false,
			"kty": "RSA",
			"key_size": 2048,
			"reuse_key": false
		},
		"secret_props": {
			"contentType": "application/x-pkcs12"
		},
		"x509_props": {
			"subject": "CN=Mycert1",
			"ekus": ["1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2"],
			"validity_months": 12
		},
		"lifetime_actions": [{
			"trigger": {
				"lifetime_percentage": 80
			},
			"action": {
				"action_type": "EmailContacts"
			}
		}],
		"issuer": {
			"name": "Unknown"
		},
		"attributes": {
			"enabled": true,
			"created": 1435699811,
			"updated": 1435699811
		}
	}
}