Biblioteca de cliente de Certificados do Azure Key Vault para JavaScript – versão 4.8.0
O Azure Key Vault é um serviço cloud que fornece armazenamento seguro e gestão automatizada de certificados utilizados numa aplicação na cloud. Vários certificados e várias versões do mesmo certificado podem ser mantidos no Azure Key Vault. Cada certificado no cofre tem uma política associada que controla a emissão e a duração do certificado, juntamente com as ações a serem tomadas como certificados perto da expiração.
Se quiser saber mais sobre o Azure Key Vault, poderá querer rever: O que é o Azure Key Vault?
Utilize a biblioteca de cliente para Certificados de Key Vault do Azure na sua aplicação de Node.js para:
- Obter, definir e eliminar um certificado.
- Atualize um certificado, os respetivos atributos, emissor, política, operação e contactos.
- Faça uma cópia de segurança e restaure um certificado.
- Obter, remover ou recuperar um certificado eliminado.
- Obtenha todas as versões de um certificado.
- Obter todos os certificados.
- Obter todos os certificados eliminados.
Nota: este pacote não pode ser utilizado no browser devido às limitações do serviço Key Vault do Azure. Veja este documento para obter orientações.
Ligações principais:
Introdução
Ambientes atualmente suportados
Pré-requisitos
- Uma subscrição do Azure
- Uma Key Vault do Azure existente. Se precisar de criar um cofre de chaves, pode fazê-lo no Portal do Azure ao seguir os passos neste documento. Em alternativa, utilize a CLI do Azure ao seguir estes passos.
Instalar o pacote
Instalar a biblioteca de cliente certificados do Azure Key Vault com o npm
npm install @azure/keyvault-certificates
Instalar a biblioteca de identidades
Key Vault os clientes autenticam-se com a Biblioteca de Identidades do Azure. Instale-o também com o npm
npm install @azure/identity
Configurar TypeScript
Os utilizadores do TypeScript precisam de ter definições de tipo de Nó instaladas:
npm install @types/node
Também tem de ativar compilerOptions.allowSyntheticDefaultImports
no seu tsconfig.json. Tenha em atenção que, se tiver ativado compilerOptions.esModuleInterop
, allowSyntheticDefaultImports
está ativado por predefinição. Veja o manual de opções do compilador do TypeScript para obter mais informações.
Autenticar com o Azure Active Directory
O serviço Key Vault depende do Azure Active Directory para autenticar pedidos para as respetivas APIs. O @azure/identity
pacote fornece uma variedade de tipos de credenciais que a sua aplicação pode utilizar para o fazer. O README para @azure/identity
fornece mais detalhes e exemplos para começar.
Para interagir com o serviço Key Vault do Azure, terá de criar uma instância da classe, um URL do CertificateClient
cofre e um objeto de credencial. Os exemplos apresentados neste documento utilizam um objeto de credencial com o nome DefaultAzureCredential
, que é adequado para a maioria dos cenários, incluindo ambientes de desenvolvimento e produção locais. Além disso, recomendamos a utilização de uma identidade gerida para autenticação em ambientes de produção.
Pode encontrar mais informações sobre as diferentes formas de autenticação e os tipos de credenciais correspondentes na documentação da Identidade do Azure.
Eis um exemplo rápido. Primeiro, importe DefaultAzureCredential
e CertificateClient
:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
Depois de estes serem importados, podemos ligar-nos ao serviço do cofre de chaves:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
// Build the URL to reach your key vault
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
// Lastly, create our certificates client and connect to the service
const client = new CertificateClient(url, credential);
Conceitos-chave
- O cliente certificados é a interface principal para interagir com os métodos de API relacionados com certificados na API de Key Vault do Azure a partir de uma aplicação JavaScript. Uma vez inicializado, fornece um conjunto básico de métodos que podem ser utilizados para criar, ler, atualizar e eliminar certificados.
- Uma versão de Certificado é uma versão de um certificado no Key Vault. Sempre que um utilizador atribui um valor a um nome de certificado exclusivo, é criada uma nova versão desse certificado. A obtenção de um certificado por um nome devolverá sempre o valor mais recente atribuído, a menos que seja fornecida uma versão específica à consulta.
- A eliminação recuperável permite que os Key Vaults suportem a eliminação e remoção como dois passos separados, pelo que os certificados eliminados não são imediatamente perdidos. Isto só acontece se o Key Vault tiver a eliminação recuperável ativada.
- Uma cópia de segurança de Certificado pode ser gerada a partir de qualquer certificado criado. Estas cópias de segurança são provenientes de dados binários e só podem ser utilizadas para regenerar um certificado eliminado anteriormente.
Especificar a versão da API do serviço Key Vault do Azure
Por predefinição, este pacote utiliza a versão mais recente do serviço do Azure Key Vault, que é 7.1
. A única outra versão suportada é 7.0
. Pode alterar a versão do serviço que está a ser utilizada ao definir a opção serviceVersion
no construtor cliente, conforme mostrado abaixo:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
// Change the Azure Key Vault service API version being used via the `serviceVersion` option
const client = new CertificateClient(url, credential, {
serviceVersion: "7.0",
});
Exemplos
As secções seguintes fornecem fragmentos de código que abrangem algumas das tarefas comuns com o Azure Key Vault Certificates. Os cenários abordados aqui consistem em:
- Criar e definir um certificado.
- Obter um certificado de Key Vault.
- Obter as informações completas de um certificado.
- Certificados no formato PEM.
- Listar todos os certificados.
- A atualizar um certificado.
- A eliminar um certificado.
- A iterar listas de certificados.
Criar e definir um certificado
beginCreateCertificate
cria um certificado a ser armazenado no Key Vault do Azure. Se já existir um certificado com o mesmo nome, é criada uma nova versão do certificado.
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
// Note: Sending `Self` as the `issuerName` of the certificate's policy will create a self-signed certificate.
await client.beginCreateCertificate(certificateName, {
issuerName: "Self",
subject: "cn=MyCert",
});
}
main();
Além do nome do certificado e da política, também pode transmitir as seguintes propriedades num terceiro argumento com valores opcionais:
enabled
: um valor booleano que determina se o certificado pode ou não ser utilizado.tags
: qualquer conjunto de valores-chave que pode ser utilizado para procurar e filtrar certificados.
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
// Note: Sending `Self` as the `issuerName` of the certificate's policy will create a self-signed certificate.
const certificatePolicy = {
issuerName: "Self",
subject: "cn=MyCert",
};
const enabled = true;
const tags = {
myCustomTag: "myCustomTagsValue",
};
async function main() {
await client.beginCreateCertificate(certificateName, certificatePolicy, {
enabled,
tags,
});
}
main();
Chamar para beginCreateCertificate
com o mesmo nome irá criar uma nova versão do mesmo certificado, que terá os atributos mais recentes fornecidos.
Uma vez que os Certificados demoram algum tempo a ser totalmente criados, beginCreateCertificate
devolve um objeto poller que controla a Operação de Execução Prolongada subjacente de acordo com as nossas diretrizes: https://azure.github.io/azure-sdk/typescript_design.html#ts-lro
O poller recebido irá permitir-lhe obter o certificado criado ao chamar para poller.getResult()
.
Também pode aguardar até que a eliminação seja concluída, ao executar chamadas de serviço individuais até o certificado ser criado ou ao aguardar até que o processo seja concluído:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
const certificatePolicy = {
issuerName: "Self",
subject: "cn=MyCert",
};
async function main() {
const poller = await client.beginCreateCertificate(certificateName, certificatePolicy);
// You can use the pending certificate immediately:
const pendingCertificate = poller.getResult();
// Or you can wait until the certificate finishes being signed:
const keyVaultCertificate = await poller.pollUntilDone();
console.log(keyVaultCertificate);
}
main();
Outra forma de esperar até que o certificado seja assinado é efetuar chamadas individuais, da seguinte forma:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const { delay } = require("@azure/core-util");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
const certificatePolicy = {
issuerName: "Self",
subject: "cn=MyCert",
};
async function main() {
const poller = await client.beginCreateCertificate(certificateName, certificatePolicy);
while (!poller.isDone()) {
await poller.poll();
await delay(5000);
}
console.log(`The certificate ${certificateName} is fully created`);
}
main();
Obter um certificado de Key Vault
A forma mais simples de ler certificados a partir do cofre é obter um certificado pelo nome. getCertificate
obterá a versão mais recente do certificado, juntamente com a política do certificado. Opcionalmente, pode obter uma versão diferente do certificado ao ligar getCertificateVersion
se especificar a versão. getCertificateVersion
não devolve a política do certificado.
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
const latestCertificate = await client.getCertificate(certificateName);
console.log(`Latest version of the certificate ${certificateName}: `, latestCertificate);
const specificCertificate = await client.getCertificateVersion(
certificateName,
latestCertificate.properties.version
);
console.log(
`The certificate ${certificateName} at the version ${latestCertificate.properties.version}: `,
specificCertificate
);
}
main();
Obter as informações completas de um certificado
A estrutura do Azure Key Vault faz distinções nítidas entre Chaves, Segredos e Certificados. As funcionalidades certificados do serviço Key Vault foram concebidas para utilizar as suas capacidades de Chaves e Segredos. Vamos avaliar a composição de um Certificado de Key Vault:
Quando é criado um certificado de Key Vault, também é criada uma chave endereçável e um segredo com o mesmo nome. A chave de Key Vault permite operações de chave e o segredo Key Vault permite a obtenção do valor do certificado como segredo. Um certificado de Key Vault também contém metadados de certificado x509 públicos. Origem: Composição de um Certificado.
Sabendo que a chave privada está armazenada num segredo de Key Vault, com o certificado público incluído, podemos recuperá-la com o cliente segredos do Key Vault.
// Using the same credential object we used before,
// and the same keyVaultUrl,
// let's create a SecretClient
import { SecretClient } from "@azure/keyvault-secrets";
const secretClient = new SecretClient(keyVaultUrl, credential);
// Assuming you've already created a Key Vault certificate,
// and that certificateName contains the name of your certificate
const certificateSecret = await secretClient.getSecret(certificateName);
// Here we can find both the private key and the public certificate, in PKCS 12 format:
const PKCS12Certificate = certificateSecret.value!;
// You can write this into a file:
fs.writeFileSync("myCertificate.p12", PKCS12Certificate);
Tenha em atenção que, por predefinição, o tipo de conteúdo dos certificados é PKCS 12. Ao especificar o tipo de conteúdo do certificado, poderá recuperá-lo no formato PEM. Antes de mostrar como criar certificados PEM, vamos primeiro explorar como obter uma chave secreta PEM de um certificado PKCS 12 primeiro.
Com openssl
o , pode obter o certificado público no formato PEM com o seguinte comando:
openssl pkcs12 -in myCertificate.p12 -out myCertificate.crt.pem -clcerts -nokeys
Também pode utilizar openssl
para obter a chave privada, da seguinte forma:
openssl pkcs12 -in myCertificate.p12 -out myCertificate.key.pem -nocerts -nodes
Tenha em atenção que, em ambos os casos, o openssl irá pedir-lhe a palavra-passe utilizada para criar o certificado. O código de exemplo que utilizámos até agora não especificou uma palavra-passe, pelo que pode acrescentar -passin 'pass:'
ao final de cada comando.
Certificados no formato PEM
Se quiser trabalhar com certificados no formato PEM, pode indicar ao serviço Key Vault do Azure para criar e gerir os seus certificados no formato PEM ao fornecer a contentType
propriedade no momento da criação dos certificados.
O exemplo seguinte mostra como criar e obter as partes públicas e privadas de um certificado formatado PEM com o Key Vault clientes para Certificados e Segredos:
// Creating the certificate
const certificateName = "MyCertificate";
const createPoller = await client.beginCreateCertificate(certificateName, {
issuerName: "Self",
subject: "cn=MyCert",
contentType: "application/x-pem-file", // Here you specify you want to work with PEM certificates.
});
const keyVaultCertificate = await createPoller.pollUntilDone();
// Getting the PEM formatted private key and public certificate:
const certificateSecret = await secretClient.getSecret(certificateName);
const PEMPair = certificateSecret.value!;
console.log(PEMPair);
Tenha em atenção que o certificado público estará no mesmo blob de conteúdo que a sua chave privada. Pode utilizar os cabeçalhos PEM para extraí-los em conformidade.
Listar todos os certificados
listPropertiesOfCertificates
irá listar todos os certificados no Key Vault.
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
async function main() {
for await (let certificateProperties of client.listPropertiesOfCertificates()) {
console.log("Certificate properties: ", certificateProperties);
}
}
main();
Atualizar um certificado
Os atributos de certificado podem ser atualizados para uma versão de certificado existente com updateCertificate
, da seguinte forma:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
const result = await client.getCertificate(certificateName);
await client.updateCertificateProperties(certificateName, result.properties.version, {
enabled: false,
tags: {
myCustomTag: "myCustomTagsValue",
},
});
}
main();
A política do certificado também pode ser atualizada individualmente com updateCertificatePolicy
, da seguinte forma:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
const result = client.getCertificate(certificateName);
// Note: Sending `Self` as the `issuerName` of the certificate's policy will create a self-signed certificate.
await client.updateCertificatePolicy(certificateName, {
issuerName: "Self",
subject: "cn=MyCert",
});
}
main();
Eliminar um certificado
O beginDeleteCertificate
método configura um certificado para eliminação. Este processo ocorrerá em segundo plano assim que os recursos necessários estiverem disponíveis.
Se a eliminação recuperável estiver ativada para o Key Vault, esta operação só irá etiquetar o certificado como um certificado eliminado. Não é possível atualizar um certificado eliminado. Só podem ser lidas, recuperadas ou removidas.
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
const poller = await client.beginDeleteCertificate(certificateName);
// You can use the deleted certificate immediately:
const deletedCertificate = poller.getResult();
// The certificate is being deleted. Only wait for it if you want to restore it or purge it.
await poller.pollUntilDone();
// You can also get the deleted certificate this way:
await client.getDeletedCertificate(certificateName);
// Deleted certificates can also be recovered or purged.
// recoverDeletedCertificate returns a poller, just like beginDeleteCertificate.
// const recoverPoller = await client.beginRecoverDeletedCertificate(certificateName);
// await recoverPoller.pollUntilDone();
// If a certificate is done and the Key Vault has soft-delete enabled, the certificate can be purged with:
await client.purgeDeletedCertificate(certificateName);
}
main();
Uma vez que a eliminação de um certificado não ocorrerá instantaneamente, é necessário algum tempo depois de o beginDeleteCertificate
método ser chamado antes de o certificado eliminado estar disponível para ser lido, recuperado ou removido.
Iterating lists of certificates (Listas iterating de certificados)
Com o CertificateClient, pode obter e iterar todos os certificados num Cofre de Certificados, bem como através de todos os certificados eliminados e das versões de um certificado específico. Estão disponíveis os seguintes métodos de API:
listPropertiesOfCertificates
listará todos os certificados não eliminados pelos respetivos nomes, apenas nas versões mais recentes.listDeletedCertificates
listará todos os certificados eliminados pelos respetivos nomes, apenas nas versões mais recentes.listPropertiesOfCertificateVersions
irá listar todas as versões de um certificado com base num nome de certificado.
O que pode ser utilizado da seguinte forma:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
for await (let certificateProperties of client.listPropertiesOfCertificates()) {
console.log("Certificate properties: ", certificateProperties);
}
for await (let deletedCertificate of client.listDeletedCertificates()) {
console.log("Deleted certificate: ", deletedCertificate);
}
for await (let certificateProperties of client.listPropertiesOfCertificateVersions(
certificateName
)) {
console.log("Certificate properties: ", certificateProperties);
}
}
main();
Todos estes métodos devolverão todos os resultados disponíveis de uma só vez. Para os obter por páginas, adicione .byPage()
logo após invocar o método de API que pretende utilizar, da seguinte forma:
const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new CertificateClient(url, credential);
const certificateName = "MyCertificateName";
async function main() {
for await (let page of client.listPropertiesOfCertificates().byPage()) {
for (let certificateProperties of page) {
console.log("Certificate properties: ", certificateProperties);
}
}
for await (let page of client.listDeletedCertificates().byPage()) {
for (let deletedCertificate of page) {
console.log("Deleted certificate: ", deletedCertificate);
}
}
for await (let page of client.listPropertiesOfCertificateVersions(certificateName).byPage()) {
for (let certificateProperties of page) {
console.log("Properties of certificate: ", certificateProperties);
}
}
}
main();
Resolução de problemas
Ativar o registo pode ajudar a descobrir informações úteis sobre falhas. Para ver um registo de pedidos HTTP e respostas, defina a variável de AZURE_LOG_LEVEL
ambiente como info
. Em alternativa, o registo pode ser ativado no runtime ao chamar setLogLevel
no @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Veja o nosso guia de resolução de problemas para obter detalhes sobre como diagnosticar vários cenários de falha.
Passos seguintes
Pode encontrar mais exemplos de código através das seguintes ligações:
- Key Vault Certificates Samples (JavaScript)
- Key Vault Certificates Samples (TypeScript)
- Key Vault Casos de Teste de Certificados
Contribuir
Se quiser contribuir para esta biblioteca, leia o guia de contribuição para saber mais sobre como criar e testar o código.
Azure SDK for JavaScript
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários