Формат хранилища ключей в ASP.NET Core
Объекты хранятся в неактивных данных в xml-представлении. Каталог по умолчанию для хранилища ключей:
- Windows: *%LOCALAPPDATA%\ASP.NET\DataProtection-Keys*
- macOS / Linux: $HOME/.aspnet/DataProtection-Keys
Ключевой <> элемент
Ключи существуют в качестве объектов верхнего уровня в репозитории ключей. Ключи соглашения имеют имя key-{guid}.xml
файла, где {guid} является идентификатором ключа. Каждый такой файл содержит один ключ. Формат файла выглядит следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<key id="80732141-ec8f-4b80-af9c-c4d2d1ff8901" version="1">
<creationDate>2015-03-19T23:32:02.3949887Z</creationDate>
<activationDate>2015-03-19T23:32:02.3839429Z</activationDate>
<expirationDate>2015-06-17T23:32:02.3839429Z</expirationDate>
<descriptor deserializerType="{deserializerType}">
<descriptor>
<encryption algorithm="AES_256_CBC" />
<validation algorithm="HMACSHA256" />
<enc:encryptedSecret decryptorType="{decryptorType}" xmlns:enc="...">
<encryptedKey>
<!-- This key is encrypted with Windows DPAPI. -->
<value>AQAAANCM...8/zeP8lcwAg==</value>
</encryptedKey>
</enc:encryptedSecret>
</descriptor>
</descriptor>
</key>
Ключевой <> элемент содержит следующие атрибуты и дочерние элементы:
Идентификатор ключа. Это значение рассматривается как авторитетное; Имя файла является просто хорошим для удобочитаемости человека.
Версия ключевого <> элемента, в настоящее время исправлена в 1.
Даты создания, активации и окончания срока действия ключа.
Элемент <дескриптора> , содержащий сведения о реализации шифрования, прошедшей проверку подлинности, содержащейся в этом ключе.
В приведенном выше примере идентификатор ключа — {80732141-ec8f-4b80-af9c-c4d2d1ff8901}, он был создан и активирован 19 марта 2015 г. и имеет срок существования 90 дней. (Иногда дата активации может быть немного до даты создания, как в этом примере. Это связано с нити в том, как API работают и безвредны на практике.)
Элемент <дескриптора>
Внешний <дескриптор> содержит атрибут deserializerType, который является именем типа, реализующего IAuthenticatedEncryptorDescriptorDeserializer. Этот тип отвечает за чтение внутреннего <дескриптора> и синтаксического анализа информации, содержащейся в ней.
Определенный формат <элемента дескриптора> зависит от реализации аутентифицированного шифратора, инкапсулированной ключом, и каждый тип десериализатора ожидает немного другой формат для этого. В общем случае этот элемент будет содержать алгоритмические сведения (имена, типы, OID или аналогичные) и материалы секретного ключа. В приведенном выше примере дескриптор указывает, что этот ключ упаковывает шифрование AES-256-CBC + проверку HMACSHA256.
<Элемент EncryptedSecret>
Зашифрованный элементSecret>, содержащий зашифрованную форму материала секретного ключа, может присутствовать, если шифрование неактивных секретов включено.< Атрибут decryptorType
— это имя типа, реализующего сборку IXmlDecryptor. Этот тип отвечает за чтение внутреннего <элемента encryptedKey> и расшифровку его для восстановления исходного открытого текста.
Как и в <descriptor>
случае, определенный формат элемента зависит от используемого <encryptedSecret>
механизма шифрования неактивных данных. В приведенном выше примере главный ключ шифруется с помощью Windows DPAPI для комментария.
Элемент <отзыва>
Отмены существуют в качестве объектов верхнего уровня в репозитории ключей. По соглашениям имеют имя revocation-{timestamp}.xml
файла (для отзыва всех ключей до определенной даты) или revocation-{guid}.xml
(для отзыва определенного ключа). Каждый файл содержит один <элемент отзыва> .
Для отзыва отдельных ключей содержимое файла будет указано ниже.
<?xml version="1.0" encoding="utf-8"?>
<revocation version="1">
<revocationDate>2015-03-20T22:45:30.2616742Z</revocationDate>
<key id="eb4fc299-8808-409d-8a34-23fc83d026c9" />
<reason>human-readable reason</reason>
</revocation>
В этом случае отменяется только указанный ключ. Если идентификатор ключа имеет значение "*", как показано в приведенном ниже примере, все ключи, дата создания которых до указанной даты отзыва отменяется.
<?xml version="1.0" encoding="utf-8"?>
<revocation version="1">
<revocationDate>2015-03-20T15:45:45.7366491-07:00</revocationDate>
<!-- All keys created before the revocation date are revoked. -->
<key id="*" />
<reason>human-readable reason</reason>
</revocation>
Элемент <reason> никогда не считывается системой. Это просто удобное место для хранения читаемой человеком причины отзыва.
ASP.NET Core
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по