Supervisión y administración de la creación de certificados
Se aplica a: Azure
escenarios y operaciones que se describen en este artículo son:
- Solicitar un certificado KV con un emisor admitido
- Obtener una solicitud pendiente, el estado de la solicitud es "inProgress"
- Obtener una solicitud pendiente, el estado de la solicitud es "completed"
- Obtener una solicitud pendiente, el estado de la solicitud pendiente es "canceled" o "failed"
- Obtener una solicitud pendiente, el estado de la solicitud pendiente es "deleted" u "overwritten"
- Crear (o importar) cuando exista una solicitud pendiente, el estado es "inProgress"
- Combinar cuando se cree una solicitud pendiente con un emisor (por ejemplo, DigiCert)
- Solicitar una cancelación mientras el estado de la solicitud pendiente es "inProgress"
- Eliminar un objeto de solicitud pendiente
- Crear un certificado KV manualmente
- Combinar cuando se crea una solicitud pendiente, creación manual de certificados
Solicitar un certificado KV con un emisor admitido
Método | URI de solicitud |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Los siguientes ejemplos requieren un objeto denominado "mydigicert" que ya esté disponible en el almacén de claves con el proveedor emisor DigiCert. El emisor de certificados es una entidad que se representa en Azure Key Vault (KV) como un recurso CertificateIssuer. Se utiliza para proporcionar información sobre el origen de un certificado de KV; el nombre del emisor, el proveedor, las credenciales y otros detalles administrativos.
Solicitud
{
"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"
}
Obtener una solicitud pendiente, el estado de la solicitud es "inProgress"
Método | URI de solicitud |
---|---|
GET | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitud
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
O BIEN
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Nota:
Si se especifica request_id en la consulta, sirve como filtro. Si el valor de request_id en la consulta y en el objeto pendiente son diferentes, se devuelve un código de estado HTTP de 404.
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"
}
Obtener una solicitud pendiente, el estado de la solicitud es "completed"
Solicitud
Método | URI de solicitud |
---|---|
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"
O BIEN
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}"
}
Obtener una solicitud pendiente, el estado de la solicitud pendiente es "canceled" o "failed"
Solicitud
Método | URI de solicitud |
---|---|
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"
O BIEN
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>"
}
}
Nota:
El valor de errorcode puede ser un error del emisor del certificado o de solicitud rechazada, según si se trata de un error del emisor o del usuario, respectivamente.
Obtener una solicitud pendiente, el estado de la solicitud pendiente es "deleted" u "overwritten"
Un objeto pendiente se puede eliminar o sobrescribir mediante una operación de creación o importación cuando su estado no es inProgress
.
Método | URI de solicitud |
---|---|
GET | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitud
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
O BIEN
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Response
StatusCode: 404, ReasonPhrase: 'Not Found'
{
"error": {
"code": "PendingCertificateNotFound",
"message": "…"
}
}
Crear (o importar) cuando exista una solicitud pendiente, el estado es "inProgress"
Un objeto pendiente tiene cuatro estados posibles: "inprogress", "canceled", "failed" o "completed".
Cuando el estado de una solicitud pendiente es "inprogress", las operaciones de creación (e importación) generan un error con un código de estado HTTP 409 (conflicto).
Para corregir un conflicto:
Si el certificado se crea manualmente, puede completar el certificado KV mediante la realización de una combinación o eliminación sobre el objeto pendiente.
Si el certificado se va a crear con un emisor, puede esperar a que el certificado se complete, genere un error o se cancele. Como alternativa, puede eliminar el objeto pendiente.
Nota:
Es posible que la eliminación de un objeto pendiente no cancele la solicitud del certificado X.509 con el proveedor.
Método | URI de solicitud |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Solicitud
{
"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."
}
}
Combinar cuando se cree una solicitud pendiente con un emisor
La combinación no se permite cuando un objeto pendiente se crea con un emisor, pero se permite cuando su estado es inProgress
.
Si la solicitud para crear el certificado X.509 genera error o se cancela por algún motivo, y si un certificado X.509 se puede recuperar por medios fuera de banda, se puede realizar una operación de combinación para completar el certificado KV.
Método | URI de solicitud |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version} |
Solicitud
{
"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."
}
}
Solicitar una cancelación mientras el estado de la solicitud pendiente es "inProgress"
Solo se puede solicitar una cancelación. Una solicitud puede ser o no cancelada. Si una solicitud no está "inProgress", se devuelve un estado HTTP 400 (solicitud incorrecta).
Método | URI de solicitud |
---|---|
PATCH | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitud
PATCH “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
O BIEN
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"
}
Eliminar un objeto de solicitud pendiente
Nota:
Es posible que la eliminación de un objeto pendiente cancele o no la solicitud del certificado X.509 con el proveedor.
Método | URI de solicitud |
---|---|
Delete | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitud
DELETE “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
O BIEN
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",
}
Crear un certificado KV manualmente
Puede crear un certificado emitido con una entidad de certificación de su elección mediante un proceso de creación manual. Establezca el nombre del emisor como "Unknown" o no especifique el campo del emisor.
Método | URI de solicitud |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Solicitud
{
"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"
}
Combinar cuando se crea una solicitud pendiente, creación manual de certificados
Método | URI de solicitud |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version} |
Solicitud
{
"x5c": [ "MIICxTCCAbi………………………trimmed for brevitiy……………………………………………EPAQj8=" ]
}
Nombre del elemento | Obligatorio | Tipo | Versión | Descripción |
---|---|---|---|---|
x5c | Sí | array | <versión de introducción> | Cadena de certificados X.509 como matriz de cadenas de 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
}
}
}