Разница в сертификате хранилища ключей Azure между идентификатором сертификата, секретным идентификатором, идентификатором ключа

#c# #.net #azure #azure-active-directory #azure-keyvault

#c# #.net #azure #azure-active-directory #azure-keyvault

Вопрос:

Я работал с секретами, хранящимися в Azure Key Vault, но это первый раз, когда используется сертификат для аутентификации, а не секрет.

У меня есть сертификат, хранящийся в хранилище ключей Azure. Я хочу использовать этот сертификат для аутентификации в приложении Azure AD.

Я понимаю, что для секретов, хранящихся в хранилище ключей Azure, мы можем ссылаться на них в функции Azure через настройки приложений с помощью @Microsoft.KeyVault(SecretUri=’secretIdentifier’).

Я заметил, что существует три типа идентификаторов для сертификата: ключ, секрет и идентификатор сертификата. В чем разница между ними и какой цели служит каждый из них?

Кроме того, можем ли мы получить доступ к сертификату через секретный идентификатор, используя @Microsoft.KeyVault(SecretUri=’Секретный идентификатор сертификата’) и использовать if для аутентификации? Если мы можем, есть ли какие-либо оговорки к этому подходу?

Наконец, почему использование сертификата для аутентификации считается лучшим подходом, а не использованием секрета?

До сих пор мне не удалось найти объяснение, которое было бы легко понятно для человека, который раньше не использовал сертификаты. Любое предложение / объяснение будет высоко оценено.

Ответ №1:

О различиях между ключами, секретами и сертификатами см. Документацию Хранилища ключей Azure в разделе Типы объектов:

https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates#object-types

Думайте о секретах как о паролях и строках подключения. Ключи — это криптографические ключи, которые могут быть сгенерированы с использованием различных алгоритмов. А сертификаты — это ключи (или пары ключей) с дополнительными политиками, такими как автоматическая ротация.

Существует преимущество в проверке подлинности с использованием сертификата вместо секрета. Преимущество заключается в том, что сертификат имеет закрытый и открытый части ключа. Получатель вашего вызова API может подтвердить, кто вы, используя только общедоступную часть вашего сертификата, в то время как вы надежно защищаете закрытую часть в своем хранилище ключей. Секреты являются общими для вызывающей и вызываемой сторон и передаются по проводам, и, следовательно, существует больше возможностей для их утечки.

Ответ №2:

https://learn.microsoft.com/en-us/azure/key-vault/certificates/about-certificates упоминает , что

При создании сертификата хранилища ключей также создаются адресуемый ключ и секрет с тем же именем. Ключ хранилища ключей позволяет выполнять операции с ключами, а секрет хранилища ключей позволяет извлекать значение сертификата как секретное. Сертификат хранилища ключей также содержит общедоступные метаданные сертификата x509.

и

При создании сертификата хранилища ключей его можно извлечь из адресуемого секрета с помощью закрытого ключа в формате PFX или PEM.

Таким образом, «Секретный идентификатор сертификата» предоставляет инструментам возможность получить доступ к «фактическим байтам» сертификата вместе с его закрытым ключом. В качестве примера, это секретный идентификатор сертификата, который может быть предоставлен прослушивателю HTTPS шлюза приложений, чтобы этот сертификат использовался в качестве сертификата HTTPS.