Monitorar e gerenciar a criação de certificados
Aplica-se ao Azure
Os cenários / operações descritas neste artigo são:
- Solicitar um certificado KV com um emissor com suporte
- Obter solicitação pendente - status da solicitação é “em andamento”
- Obter solicitação pendente - status da solicitação é “concluída”
- Obter solicitação pendente - o status da solicitação pendente é “cancelada” ou está “ocorreu um erro”
- Obter solicitação pendente - o status da solicitação pendente é “excluída” ou “substituída”
- Criar (ou Importar) quando existem solicitações pendentes - o status é "em andamento"
- Mesclar quando a solicitação pendente é criada com um emissor (por exemplo, DigiCert)
- Solicitar um cancelamento enquanto o status da solicitação pendente é "em andamento"
- Excluir um objeto de solicitação pendente
- Criar um certificado KV manualmente
- Mesclar quando uma solicitação pendente é criada - criação manual de certificado
Solicitar um certificado KV com um emissor com suporte
Método | URI da solicitação |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Os exemplos a seguir exigem que um objeto chamado "mydigicert" já esteja disponível em seu Key Vault com o provedor de emissor como DigiCert. O emissor do certificado é uma entidade representada no Azure Key Vault (KV) como um recurso CertificateIssuer. Ele é usado para fornecer informações sobre a origem de um certificado KV; nome do emissor, provedor, credenciais e outros detalhes administrativos.
Solicitação
{
"policy": {
"x509_props": {
"subject": "CN=MyCertSubject1"
},
"issuer": {
"name": "mydigicert",
"cty": "OV-SSL",
}
}
}
Resposta
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"
}
Obter solicitação pendente - status da solicitação é “em andamento”
Método | URI da solicitação |
---|---|
GET | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitação
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
OU
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Observação
Se request_id for especificado na consulta, ele atua como um filtro. Se o request_id na consulta e no objeto pendente forem diferentes, um código de status http de 404 é retornado.
Resposta
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"
}
Obter solicitação pendente - status da solicitação é “concluída”
Solicitação
Método | URI da solicitação |
---|---|
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"
OU
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Resposta
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}"
}
Obter solicitação pendente - o status da solicitação pendente é “cancelada” ou está “ocorreu um erro”
Solicitação
Método | URI da solicitação |
---|---|
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"
OU
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Resposta
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>"
}
}
Observação
O valor de errorcode pode ser “Erro de emissor do certificado” ou “Solicitação rejeitada” com base no erro do emissor ou usuário respectivamente.
Obter solicitação pendente - o status da solicitação pendente é “excluída” ou “substituída”
Um objeto pendente pode ser excluído ou substituído por uma operação de criação/importação quando seu status não é inProgress
.
Método | URI da solicitação |
---|---|
GET | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitação
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
OU
GET “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Resposta
StatusCode: 404, ReasonPhrase: 'Not Found'
{
"error": {
"code": "PendingCertificateNotFound",
"message": "…"
}
}
Criar (ou Importar) quando existem solicitações pendentes - o status é "em andamento"
Um objeto pendente tem quatro possíveis estados; “em andamento”, “cancelado”, “falha” ou “concluído”.
Quando o estado de uma solicitação pendente for "em andamento", as operações criar (e importar) falharão com um código de status http de 409 (conflito).
Para corrigir um conflito:
Se o certificado está sendo criado manualmente, você pode concluir o certificado KV fazendo uma mesclagem ou excluir o objeto pendente.
Se o certificado está sendo criado com um emissor, você pode esperar até que o certificado seja concluído, falhe ou seja cancelado. Como alternativa, você pode excluir o objeto pendente.
Observação
A exclusão de um objeto pendente pode ou não cancelar a solicitação do certificado x509 com o provedor.
Método | URI da solicitação |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Solicitação
{
"policy": {
"x509_props": {
"subject": "CN=MyCertSubject1"
},
"issuer": {
"name": "mydigicert"
}
}
}
Resposta
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."
}
}
Mesclar quando a solicitação pendente é criada com um emissor
A mesclagem não é permitida quando um objeto pendente é criado com um emissor, mas é permitida quando o estado é inProgress
.
Se a solicitação para criar o certificado x509 falhar ou for cancelada por algum motivo, e se um certificado x509 pode ser recuperado por fora da banda, uma operação de mesclagem pode ser feita para concluir o certificado KV.
Método | URI da solicitação |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version} |
Solicitação
{
"x5c": [ "MIICxTCCAbi………………………trimmed for brevitiy……………………………………………EPAQj8=" ]
}
Resposta
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 um cancelamento enquanto o status da solicitação pendente é "em andamento"
Um cancelamento só pode ser solicitado. Uma solicitação pode ou não ser cancelada. Se uma solicitação não estiver "em andamento", será retornado um status http de 400 (Solicitação incorreta).
Método | URI da solicitação |
---|---|
PATCH | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitação
PATCH “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
OU
PATCH “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
{
"cancellation_requested": true
}
Resposta
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"
}
Excluir um objeto de solicitação pendente
Observação
A exclusão do objeto pendente pode ou não cancelar a solicitação do certificado x509 com o provedor.
Método | URI da solicitação |
---|---|
DELETE | https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version} |
Solicitação
DELETE “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}&request_id=a76827a18b63421c917da80f28e9913d"
OU
DELETE “https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}"
Resposta
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",
}
Criar um certificado KV manualmente
Você pode criar um certificado emitido com uma autoridade de certificação de sua escolha por meio de um processo de criação manual. Defina o nome do emissor como "Desconhecido" ou não especifique o campo de emissor.
Método | URI da solicitação |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version} |
Solicitação
{
"policy": {
"x509_props": {
"subject": "CN=MyCertSubject1"
},
"issuer": {
"name": "Unknown"
}
}
}
Resposta
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"
}
Mesclar quando uma solicitação pendente é criada - criação manual de certificado
Método | URI da solicitação |
---|---|
POST | https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version} |
Solicitação
{
"x5c": [ "MIICxTCCAbi………………………trimmed for brevitiy……………………………………………EPAQj8=" ]
}
Nome do elemento | Obrigatório | Tipo | Versão | Descrição |
---|---|---|---|---|
x5c | Sim | matriz | <introdução de versão> | Cadeia confiável x509 como matriz de cadeia de caracteres de base 64. |
Resposta
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
}
}
}