Compartilhar via


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
		}
	}
}