Partilhar via


Monitorizar e gerir a criação do certificados

Aplica-se a: Azure

Os cenários / operações descritos neste artigo são:

  • Solicite um certificado KV com um emissor suportado
  • Obter solicitação pendente - o status da solicitação é "inProgress"
  • Obter pedido pendente - o estado do pedido está "concluído"
  • Obter pedido pendente - o estado do pedido pendente é "cancelado" ou "falhou"
  • Obter solicitação pendente - o status da solicitação pendente é "excluído" ou "substituído"
  • Criar (ou importar) quando a solicitação pendente existir - o status é "inProgress"
  • Mesclar quando uma solicitação pendente é criada com um emissor (DigiCert, por exemplo)
  • Solicite um cancelamento enquanto o status da solicitação pendente estiver "inProgress"
  • Excluir um objeto de solicitação pendente
  • Criar um certificado KV manualmente
  • Mesclar quando uma solicitação pendente é criada - criação manual de certificados

Solicite um certificado KV com um emissor suportado

Método URI do pedido
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 cofre de chaves com o provedor emissor como DigiCert. O emissor do certificado é uma entidade representada no Azure Key Vault (KV) como um recurso CertificateIssuer. É usado para fornecer informações sobre a origem de um certificado KV; Nome do emissor, provedor, credenciais e outros detalhes administrativos.

Pedir

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

Obter solicitação pendente - o status da solicitação é "inProgress"

Método URI do pedido
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Pedir

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

Nota

Se request_id for especificado na consulta, ele funcionará como um filtro. Se os request_id na consulta e no objeto pendente forem diferentes, um código de status http de 404 será retornado.

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

Obter pedido pendente - o estado do pedido está "concluído"

Pedir

Método URI do pedido
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}"

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

Obter pedido pendente - o estado do pedido pendente é "cancelado" ou "falhou"

Pedir

Método URI do pedido
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}"

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

O valor do código de erro pode ser "Erro do emissor do certificado" ou "Solicitação rejeitada" com base no erro do emissor ou do usuário, respectivamente.

Obter solicitação pendente - o status da solicitação pendente é "excluído" ou "substituído"

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 do pedido
GET https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Pedir

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

Response

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

Criar (ou importar) quando a solicitação pendente existir - o status é "inProgress"

Um objeto pendente tem quatro estados possíveis; "em andamento", "cancelado", "reprovado" ou "concluído".

Quando o estado de uma solicitação pendente estiver "em andamento", as operações de criação (e importação) falharão com um código de status http de 409 (conflito).

Para corrigir um conflito:

  • Se o certificado estiver sendo criado manualmente, você poderá concluir o certificado KV fazendo uma mesclagem ou excluir o objeto pendente.

  • Se o certificado estiver sendo criado com um emissor, você poderá aguardar até que o certificado seja concluído, falhe ou seja cancelado. Como alternativa, você pode excluir o objeto pendente.

Nota

A exclusão de um objeto pendente pode ou não cancelar a solicitação de certificado x509 com o provedor.

Método URI do pedido
POST https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version}

Pedir

{
  "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."
  }
}

Mesclar quando uma solicitação pendente é criada com um emissor

A mesclagem não é permitida quando um objeto pendente é criado com um emissor, mas é permitida quando seu estado é inProgress.

Se a solicitação para criar o certificado x509 falhar ou for cancelada por algum motivo, e se um certificado x509 puder ser recuperado por meios fora de banda, uma operação de mesclagem poderá ser feita para concluir o certificado KV.

Método URI do pedido
POST https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version}

Pedir

{
  "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."
  }
}

Solicite um cancelamento enquanto o status da solicitação pendente estiver "inProgress"

O cancelamento só pode ser solicitado. Um pedido pode ou não ser cancelado. Se uma solicitação não for "inProgress", um status http de 400 (Solicitação incorreta) será retornado.

Método URI do pedido
PATCH https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Pedir

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

OU

REMENDO “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"
}

Excluir um objeto de solicitação pendente

Nota

A exclusão do objeto pendente pode ou não cancelar a solicitação de certificado x509 com o provedor.

Método URI do pedido
DELETE https://mykeyvault.vault.azure.net/certificates/mycert1/pending?api-version={api-version}

Pedir

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

OU

SUPRIMIR “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",
}

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 do emissor.

Método URI do pedido
POST https://mykeyvault.vault.azure.net/certificates/mycert1/create?api-version={api-version}

Pedir

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

Mesclar quando uma solicitação pendente é criada - criação manual de certificados

Método URI do pedido
POST https://mykeyvault.vault.azure.net/certificates/mycert1/pending/merge?api-version={api-version}

Pedir

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

Nome do elemento Necessário Type Versão Description
x5c Sim matriz <versão de introdução> Cadeia de certificados X509 como matriz de cadeia de caracteres 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
		}
	}
}