Rotera signeringsnycklar
I den här artikeln granskar vi stegen för att rotera dina Microsoft Entra – verifierat ID signeringsnycklar.
Förutsättningar
- Verifierad ID-utfärdare registreras manuellt och signeringsnycklarna finns i din egen Azure Key Vault-instans. Snabbkonfigurationen använder en delad signeringsnyckel som hanteras av Microsoft och som du inte kan rotera själv.
- Administratörsanvändaren som utför nyckelrotation måste ha behörighet till nycklarna i Key Vault.
Rotera signeringsnycklarna
De offentliga nycklarna är tillgängliga i dokumentet för decentraliserad identifierare (DID) för alla som behöver verifiera signaturer som skapats av en utfärdare. För en utfärdare som använder did:web
metoden är DID-dokumentet tillgängligt på https://contoso.com/.well-known/did.json
, där contoso.com är ett exempel.
Verifierat ID bör inte börja signera med hjälp av den nya nyckeln förrän en uppdaterad version är offentligt tillgänglig på webbservern. Om du använder en distribution i flera regioner, kanske med Azure Content Delivery Network, kan det ta lite tid innan distributionsprocessen uppdateras did.json
.
För att hjälpa administratörer att rotera signeringsnycklar utan avbrott i tjänsten följer rotationsprocessen följande steg:
Anropa signingKeys/rotate API för att skapa en ny signeringsnyckel i Key Vault. Åtkomsttoken i anropet måste vara för en administratörsanvändare med åtkomst till nycklar i nyckelvalvet. Den här åtgärden anger en ny aktuell nyckel i nyckelvalvet. Den tidigare nyckeln flyttas till äldre nycklar, men den kan fortfarande aktiveras. Svaret är utfärdarens JSON-objekt med attributet
didDocumentStatus
med ettoutOfSync
värde, vilket indikerar att det finns en avvikelse mellan Key Vault och det offentligt tillgängligadid.json
dokumentet.Gå till Installation i portalen för verifierat ID. Välj Registrera decentraliserat ID och kopiera eller ladda ned den uppdaterade
did.json
filen. Den innehåller nu de nya och gamla nycklarna.Ersätt
did.json
på alla webbservrar där den tidigare distribuerades. Om du redigerade den manuellt kontrollerar du att den fortfarande har en giltig JSON-syntax med hjälp av ett verktyg somhttps://jsonformatter.org/
. Innan du fortsätter kontrollerar du att du kan hämta det nyadid.json
dokumentet från Internet med en webbläsare.Anropa API:et synchronizeWithDidDocument för att börja använda den nya signeringsnyckeln. Det här API-anropet verifierar att Key Vault och det offentliga
did.json
dokumentet matchar. Om de matchar börjar den verifierade ID-utfärdaren signera med hjälp av den nya nyckeln i Key Vault. JSON-objektetdidDocumentStatus
i den returnerade utfärdaren har värdetpublished
. Om värdet fortfarande äroutOfSync
, finns det en avvikelse mellan Key Vault ochdid.json
dokumentet och den tidigare nyckeln används fortfarande för signering.
Behöver jag rotera nycklar i verifierat ID?
Tekniskt sett behöver du inte rotera signeringsnycklar i verifierat ID om du använder din egen Key Vault-instans. Den aktuella signeringsnyckeln upphör inte att gälla. Precis som med alla offentliga/privata nyckellösningar är det bästa praxis att rotera nycklar med jämna mellanrum.
Vad händer när jag roterar signeringsnyckeln?
När du har utfört steg 1–4 har verifierat ID en ny signeringsnyckel och alla JSON-webbtoken som signerats från den tidpunkten signeras med hjälp av den nya nyckeln. Det innebär att utfärdande- och presentationsbegäranden och utfärdade autentiseringsuppgifter signeras med hjälp av den nya nyckeln.
Vad händer med autentiseringsuppgifter som signerats av den gamla nyckeln?
Utfärdade verifierade ID-autentiseringsuppgifter som signerats av en nyckel som inte längre är aktuell fortsätter att fungera om den offentliga nyckeln är tillgänglig i det offentliga did.json
dokumentet och nyckeln inte inaktiveras eller tas bort i Key Vault.
Vad händer när gamla signeringsnycklar inte längre är tillgängliga?
Om en nyckel som användes för att signera en utfärdad verifierad ID-autentiseringsuppgift inte finns i det offentliga did.json
dokumentet misslyckas alla verifieringsförsök eftersom kontrollanten inte kan matcha den offentliga nyckeln som används som signatur. Det finns två scenarier att känna till.
För det första: Verifierat ID har en gräns på 10 nycklar som kan användas internt. De består av en aktuell nyckel och nio tidigare nycklar. Om Key Vault innehåller 12 nycklar läses verifierat ID bara in och använder de första 10. Du kan inte redigera did.json
dokumentet manuellt för att lägga till gamla nycklar eftersom det leder till ett matchningsfel mellan vad verifierat ID läses in och vad did.json
dokumentet innehåller. Om du försöker anropa synchronizeWithDidDocument i det här fallet returneras didDocumentStatus
outOfSync
.
Anta till exempel att du har 12 nycklar i Key Vault och vill att verifierat ID inte ska läsa in nycklar 8 och 9 i listan med nycklar. Du måste inaktivera nycklarna 8 och 9 i Key Vault och sedan utföra steg 2–4.
För det andra: Om du roterar nycklar 12 gånger i det här exemplet läser verifierat ID inte in de två äldsta nycklarna längre. Verifierade ID-autentiseringsuppgifter som utfärdats med dessa två nycklar kan inte verifieras längre.
Kommentar
Din nyckelroteringsprincip måste samordnas med livslängden för utfärdade verifierade ID-autentiseringsuppgifter så att autentiseringsuppgifterna förnyas eller utfärdas igen innan en gammal nyckel dras tillbaka. Ett exempel på en lösning som inte fungerar är att utfärda verifierade ID-autentiseringsuppgifter med ett förfallodatum 12 månader bort och samtidigt har en nyckelroteringsprincip för att rotera nycklar varje månad. En sådan lösning är i trubbel de sista två månaderna på året eftersom gamla nycklar inte längre är tillgängliga.
Kan jag rotera nycklar direkt i Key Vault i stället för att anropa API:et för verifierat ID?
Du bör inte använda rotationsfunktionen i Key Vaults administratörsportal. Verifierat ID utför fler uppgifter när det anropar API:et /signingKeys/rotate än att bara rotera nyckeln i Key Vault.