Megosztás a következőn keresztül:


Azure Key Vault tanúsítványok JavaScripthez készült ügyféloldali kódtár – 4.10.0-s verzió

Az Azure Key Vault egy felhőszolgáltatás, amely biztonságos tárolást és a felhőalkalmazásokban használt tanúsítványok automatizált kezelését biztosítja. Több tanúsítvány és ugyanazon tanúsítvány több verziója is tárolható az Azure Key Vaultban. A tárolóban minden tanúsítványhoz tartozik egy szabályzat, amely szabályozza a tanúsítvány kiállítását és élettartamát, valamint a lejárathoz közeli tanúsítványokként végrehajtandó műveleteket.

Ha többet szeretne megtudni az Azure Key Vaultról, érdemes lehet áttekinteni: Mi az Az Azure Key Vault?

Használja az Azure Key Vault-tanúsítványok ügyfélkódtárát a Node.js alkalmazásban a következő célokra:

  • Tanúsítvány lekérése, beállítása és törlése.
  • A tanúsítvány, az attribútumok, a kiállító, a szabályzat, a művelet és a névjegyek frissítése.
  • Tanúsítvány biztonsági mentése és visszaállítása.
  • Törölt tanúsítvány lekérése, törlése vagy helyreállítása.
  • A tanúsítvány összes verziójának lekérése.
  • Szerezze be az összes tanúsítványt.
  • Szerezze be az összes törölt tanúsítványt.

Megjegyzés: Ez a csomag az Azure Key Vault szolgáltatás korlátozásai miatt nem használható a böngészőben, útmutatásért tekintse meg a dokumentum .

Főbb hivatkozások:

Kezdetekhez

Jelenleg támogatott környezetek

Előfeltételek

  • Egy Azure-előfizetés
  • Meglévő Azure Key Vault. Ha kulcstartót kell létrehoznia, ezt az Azure Portalon teheti meg a dokumentum lépéseit követve. Másik lehetőségként használja az Azure CLI-t az alábbi lépések .

A csomag telepítése

Az Azure Key Vault-tanúsítványok ügyfélkódtárának telepítése npm használatával

npm install @azure/keyvault-certificates

Az identitástár telepítése

A Key Vault-ügyfelek az Azure Identity Library használatával hitelesítik magukat. Telepítse az npm használatával is

npm install @azure/identity

TypeScript konfigurálása

A TypeScript-felhasználóknak telepítve kell lenniük a csomóponttípus-definícióknak:

npm install @types/node

A tsconfig.jsoncompilerOptions.allowSyntheticDefaultImports is engedélyeznie kell. Vegye figyelembe, hogy ha engedélyezte a compilerOptions.esModuleInterop, a allowSyntheticDefaultImports alapértelmezés szerint engedélyezve van. További információért tekintse meg TypeScript fordítóbeállítási kézikönyvét.

Hitelesítés az Azure Active Directoryval

A Key Vault szolgáltatás az Azure Active Directoryra támaszkodik az API-khoz érkező kérések hitelesítéséhez. A @azure/identity csomag számos hitelesítő adattípust biztosít, amelyeket az alkalmazás használhat erre. A README további részleteket és mintákat tartalmaz az első lépésekhez.

Az Azure Key Vault szolgáltatás használatához létre kell hoznia egy példányt a CertificateClient osztályból, egy tároló URL-címét és egy hitelesítő objektumot. A dokumentumban bemutatott példák egy DefaultAzureCredentialnevű hitelesítő objektumot használnak, amely a legtöbb forgatókönyvhez, beleértve a helyi fejlesztési és éles környezeteket is. Emellett azt is javasoljuk, hogy felügyelt identitás használjon éles környezetekben történő hitelesítéshez.

A hitelesítés különböző módjairól és a hozzájuk tartozó hitelesítő adatok típusairól az Azure Identity dokumentációjánaktalál további információt.

Íme egy gyors példa. Először importálja DefaultAzureCredential és CertificateClient. Ezek importálása után legközelebb csatlakozhatunk a Key Vault szolgáltatáshoz:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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);

Főbb fogalmak

  • A Tanúsítványügyfél az elsődleges felület, amely egy JavaScript-alkalmazásból származó Azure Key Vault API-tanúsítványokhoz kapcsolódó API-metódusokkal kommunikál. Az inicializálás után a tanúsítvány létrehozásához, olvasásához, frissítéséhez és törléséhez használható alapszintű módszereket biztosít.
  • A tanúsítványverzió a Key Vault tanúsítványának verziója. Minden alkalommal, amikor egy felhasználó egy értéket rendel egy egyedi tanúsítványnévhez, létrejön a tanúsítvány új verziója,. A tanúsítvány név szerinti lekérése mindig a legújabb hozzárendelt értéket adja vissza, hacsak nem ad meg egy adott verziót a lekérdezéshez.
  • helyreállítható törlési lehetővé teszi, hogy a Key Vaultok két külön lépésben támogassák a törlést és a törlést, így a törölt tanúsítványok nem vesznek el azonnal. Ez csak akkor fordul elő, ha a Key Vault helyreállítható törlési engedélyezve van.
  • A tanúsítvány biztonsági mentési bármely létrehozott tanúsítványból létrehozható. Ezek a biztonsági másolatok bináris adatokként jönnek létre, és csak a korábban törölt tanúsítványok újragenerálásához használhatók.

Az Azure Key Vault szolgáltatás API-verziójának megadása

Ez a csomag alapértelmezés szerint a legújabb Azure Key Vault szolgáltatásverziót használja, amely 7.1. Az egyetlen támogatott verzió a 7.0. A használt szolgáltatásverziót az ügyfélkonstruktor serviceVersion beállításával módosíthatja az alábbiak szerint:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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.5",
});

Példák

A következő szakaszok olyan kódrészleteket nyújtanak, amelyek az Azure Key Vault-tanúsítványokkal végzett gyakori feladatok némelyikét lefedik. Az itt tárgyalt forgatókönyvek a következőkből állnak:

Tanúsítvány létrehozása és beállítása

beginCreateCertificate létrehoz egy tanúsítványt, amely az Azure Key Vaultban tárolható. Ha már létezik azonos nevű tanúsítvány, létrejön a tanúsítvány új verziója.

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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.
await client.beginCreateCertificate(certificateName, {
  issuerName: "Self",
  subject: "cn=MyCert",
});

A tanúsítvány és a szabályzat neve mellett a következő tulajdonságokat is átadhatja egy harmadik argumentumban opcionális értékekkel:

  • enabled: Logikai érték, amely meghatározza, hogy a tanúsítvány használható-e vagy sem.
  • tags: A tanúsítványok kereséséhez és szűréséhez használható kulcsértékek összes készlete.
import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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",
};

await client.beginCreateCertificate(certificateName, certificatePolicy, {
  enabled,
  tags,
});

Az azonos nevű beginCreateCertificate hívása ugyanannak a tanúsítványnak egy új verzióját fogja létrehozni, amely a legújabb attribútumokkal rendelkezik.

Mivel a tanúsítványok létrehozása némi időt vesz igénybe, beginCreateCertificate egy olyan lekérdezési objektumot ad vissza, amely nyomon követi az alapul szolgáló hosszú futású műveletet az irányelveink szerint: https://azure.github.io/azure-sdk/typescript_design.html#ts-lro

A kapott lekérdezés lehetővé teszi a létrehozott tanúsítvány lekérését a poller.getResult()hívásával. A törlés befejezését is megvárhatja, ha egyéni szolgáltatáshívásokat futtat a tanúsítvány létrehozásához, vagy megvárja, amíg a folyamat befejeződik:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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",
};

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);

A tanúsítvány aláírását az alábbi módon is meg lehet várni, ha egyéni hívásokat hajt végre:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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",
};

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

const poller = await client.beginCreateCertificate(certificateName, certificatePolicy);

while (!poller.isDone()) {
  await poller.poll();
  await delay(5000);
}

console.log(`The certificate ${certificateName} is fully created`);

Key Vault-tanúsítvány beszerzése

A tanúsítványoknak a tárolóból való visszaolvasásának legegyszerűbb módja a tanúsítvány név szerinti lekérése. getCertificate lekéri a tanúsítvány legújabb verzióját, valamint a tanúsítvány házirendjét. Ha megadja a verziót, meghívhatja getCertificateVersion a tanúsítvány másik verzióját is. getCertificateVersion nem adja vissza a tanúsítvány házirendjét.

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@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 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,
);

Tanúsítvány teljes adatainak lekérése

Az Azure Key Vault kialakítása éles különbségeket tesz a kulcsok, a titkos kódok és a tanúsítványok között. A Key Vault szolgáltatás Tanúsítványfunkciói a Kulcsok és titkos kódok képességeinek kihasználásával lettek kialakítva. Értékeljük ki a Key Vault-tanúsítvány összetételét:

Key Vault-tanúsítvány létrehozásakor a rendszer egy címezhető kulcsot és titkos kulcsot is létrehoz ugyanazzal a névvel. A Key Vault-kulcs lehetővé teszi a kulcsműveleteket, a Key Vault-titkos kulcs pedig lehetővé teszi a tanúsítvány értékének titkos kulcsként való lekérését. A Key Vault-tanúsítvány nyilvános x509-tanúsítvány metaadatait is tartalmazza. Forrás: Tanúsítványösszetétele.

Tudva, hogy a titkos kulcs egy Key Vault-titkos kulcsban van tárolva, és a nyilvános tanúsítványt is tartalmazza, a Key Vault Titkos kulcsok ügyféllel lekérhetjük.

import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
import { writeFileSync } from "node:fs";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const secretClient = new SecretClient(keyVaultUrl, credential);

const certificateName = "MyCertificateName";

// 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:
writeFileSync("myCertificate.p12", PKCS12Certificate);

Vegye figyelembe, hogy alapértelmezés szerint a tanúsítványok tartalomtípusa PKCS 12. A tanúsítvány tartalomtípusának megadásával PEM formátumban is lekérheti. Mielőtt bemutatjuk, hogyan hozhat létre PEM-tanúsítványokat, először nézzük meg, hogyan kérhető le pEM titkos kulcs egy PKCS 12-tanúsítványból.

A opensslhasználatával pEM formátumban lekérheti a nyilvános tanúsítványt az alábbi paranccsal:

openssl pkcs12 -in myCertificate.p12 -out myCertificate.crt.pem -clcerts -nokeys

A titkos kulcs lekéréséhez openssl is használhatja az alábbiak szerint:

openssl pkcs12 -in myCertificate.p12 -out myCertificate.key.pem -nocerts -nodes

Vegye figyelembe, hogy az Openssl mindkét esetben a tanúsítvány létrehozásához használt jelszót kéri. Az eddig használt mintakód nem adott meg jelszót, így az egyes parancsok végéhez hozzáfűzhet -passin 'pass:'.

Tanúsítványok PEM formátumban

Ha PEM formátumú tanúsítványokkal szeretne dolgozni, a tanúsítványok létrehozásakor megadhatja az Azure Key Vault szolgáltatásának, hogy PEM formátumban hozza létre és kezelje a tanúsítványokat. Ehhez adja meg a contentType tulajdonságot a tanúsítványok létrehozásakor.

Az alábbi példa bemutatja, hogyan hozhatja létre és kérdezheti le egy PEM formátumú tanúsítvány nyilvános és privát részeit a Key Vault-ügyfelek használatával tanúsítványokhoz és titkos kulcsokhoz:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";
import { SecretClient } from "@azure/keyvault-secrets";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);
const secretClient = new SecretClient(keyVaultUrl, credential);
// 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.
});
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);

Ne feledje, hogy a nyilvános tanúsítvány ugyanabban a tartalomblobban lesz, mint a titkos kulcs. A PEM-fejlécekkel ennek megfelelően kinyerheti őket.

Az összes tanúsítvány listázása

listPropertiesOfCertificates a Key Vault összes tanúsítványát listázni fogja.

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

for await (const certificateProperties of client.listPropertiesOfCertificates()) {
  console.log("Certificate properties: ", certificateProperties);
}
for await (const deletedCertificate of client.listDeletedCertificates()) {
  console.log("Deleted certificate: ", deletedCertificate);
}
for await (const certificateProperties of client.listPropertiesOfCertificateVersions(
  certificateName,
)) {
  console.log("Certificate properties: ", certificateProperties);
}

Tanúsítvány frissítése

A tanúsítványattribútumok frissíthetők egy meglévő tanúsítványverzióra updateCertificate, az alábbiak szerint:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

const result = await client.getCertificate(certificateName);
await client.updateCertificateProperties(certificateName, result.properties.version, {
  enabled: false,
  tags: {
    myCustomTag: "myCustomTagsValue",
  },
});

A tanúsítvány házirendje az alábbi updateCertificatePolicyis frissíthető:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

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",
});

Tanúsítvány törlése

A beginDeleteCertificate metódus beállít egy tanúsítványt a törléshez. Ez a folyamat a háttérben fog történni, amint a szükséges erőforrások rendelkezésre állnak.

Ha helyreállítható törlési engedélyezve van a Key Vaulthoz, ez a művelet csak törölt tanúsítványként címkézi fel a tanúsítványt. A törölt tanúsítvány nem frissíthető. Csak olvashatók, helyreállíthatók vagy törölhetők.

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

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);

Mivel a tanúsítvány törlése nem történik meg azonnal, a beginDeleteCertificate metódus meghívása után időre van szükség, mielőtt a törölt tanúsítvány olvasható, helyreállítható vagy törölhető lenne.

Tanúsítványok listájának iterálása

A CertificateClient használatával lekérheti és iterálhatja a Tanúsítványtároló összes tanúsítványát, valamint az összes törölt tanúsítványt és egy adott tanúsítvány verzióját. A következő API-metódusok érhetők el:

  • listPropertiesOfCertificates listázni fogja az összes nem törölt tanúsítványt a nevük alapján, csak a legújabb verziókban.
  • listDeletedCertificates az összes törölt tanúsítványt listázni fogja a nevük alapján, csak a legújabb verziójukon.
  • listPropertiesOfCertificateVersions a tanúsítvány összes verzióját egy tanúsítványnév alapján listázni fogja.

A következő módon használható:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

for await (const certificateProperties of client.listPropertiesOfCertificates()) {
  console.log("Certificate properties: ", certificateProperties);
}
for await (const deletedCertificate of client.listDeletedCertificates()) {
  console.log("Deleted certificate: ", deletedCertificate);
}
for await (const certificateProperties of client.listPropertiesOfCertificateVersions(
  certificateName,
)) {
  console.log("Certificate properties: ", certificateProperties);
}

Ezek a módszerek egyszerre az összes elérhető eredményt. Ha oldalak szerint szeretné lekérni őket, adja hozzá .byPage() közvetlenül a használni kívánt API-metódus meghívása után, az alábbiak szerint:

import { DefaultAzureCredential } from "@azure/identity";
import { CertificateClient } from "@azure/keyvault-certificates";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const keyVaultUrl = `https://${vaultName}.vault.azure.net`;

const client = new CertificateClient(keyVaultUrl, credential);

const certificateName = "MyCertificate";

for await (const page of client.listPropertiesOfCertificates().byPage()) {
  for (const certificateProperties of page) {
    console.log("Certificate properties: ", certificateProperties);
  }
}
for await (const page of client.listDeletedCertificates().byPage()) {
  for (const deletedCertificate of page) {
    console.log("Deleted certificate: ", deletedCertificate);
  }
}
for await (const page of client.listPropertiesOfCertificateVersions(certificateName).byPage()) {
  for (const certificateProperties of page) {
    console.log("Properties of certificate: ", certificateProperties);
  }
}

Hibaelhárítás

A naplózás engedélyezése segíthet a hibákról szóló hasznos információk feltárásában. A HTTP-kérések és válaszok naplójának megtekintéséhez állítsa a AZURE_LOG_LEVEL környezeti változót info. Másik lehetőségként a naplózás futásidőben is engedélyezhető a setLogLevel meghívásával a @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

A különböző hibaforgatókönyvek diagnosztizálásával kapcsolatos részletekért tekintse meg hibaelhárítási útmutatónkat.

Következő lépések

További kódmintákat az alábbi hivatkozásokon talál:

Hozzájárulás

Ha hozzá szeretne járulni ehhez a kódtárhoz, olvassa el a közreműködői útmutatót, amelyből többet is megtudhat a kód összeállításáról és teszteléséről.