Поделиться через


Использование Azure Key Vault для доставки TLS/SSL-сертификатов в JVM

В этой статье описывается, как интегрировать Azure Key Vault в JVM для доставки TLS/SSL-сертификатов.

Добавление поставщика JCA в файл java.security

Чтобы зарегистрировать поставщика JCA, JVM должен знать об этом. Чтобы выполнить эту задачу, выполните следующие действия.

  1. Создайте копию файла java.security в установке JVM и присвойте файлу my.java.security.

  2. В файле найдите строку security.provider.<maximum-value>. Замените заполнитель <maximum-value> максимальным значением в этой позиции среди всех записей. Например, security.provider.13=SunPKCS11.

  3. Увеличьте число этой записи на 1. Например, security.provider.13 должен стать security.provider.14.

  4. Добавьте следующую строку:

    security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
    

Заметка

Убедитесь, что каждая запись security.provider.<X> имеет разное числовое значение для <X>и сохраните их в возрастающем порядке, начиная с 1.

Запуск приложения

Чтобы запустить приложение, выполните следующие действия и замените заполнители <...> собственными значениями:

  1. Добавьте файл azure-security-keyvault-jca-X.Y.Z.jar в класспас. Например, если вы хотите интегрироваться с Tomcat 9, необходимо добавить полный путь к файлу azure-security-keyvault-jca-X.Y.Z.jar в путь к классу Java с помощью tomcat9w.exe.

  2. Добавьте -Djava.security.properties==my.java.security в командную строку.

  3. Добавьте -Dazure.keyvault.uri=<your-keyvault-uri> в командную строку, чтобы указать, какой azure Key Vault следует использовать. Например, -Dazure.keyvault.uri=https://some.vault.azure.net/.

  4. Добавьте аргументы, указанные в следующем списке, в зависимости от сценария:

    • При проверке подлинности с помощью служебной учетной записи добавьте следующие аргументы:

      • -Dazure.keyvault.tenant-id=<your-tenant-id>
      • -Dazure.keyvault.client-id=<your-client-id>
      • -Dazure.keyvault.client-secret=<your-client-secret>
    • При проверке подлинности с помощью управляемого удостоверения, назначаемого системой, больше аргументов не требуется.

    • При аутентификации с использованием управляемого удостоверения, назначенного пользователем, добавьте следующий аргумент:

      • -Dazure.keyvault.managed-identity=<object-id-of-your-user-managed-identity>

Дополнительные сведения об этих сценариях проверки подлинности см. в статьях Объекты приложений и сервис-принципалов в Microsoft Entra ID и Как управляемые удостоверения для ресурсов Azure работают с виртуальными машинами Azure.

Использование служебного принципала

Чтобы создать идентификатор клиента Azure и секрет клиента Azure, используйте следующую команду, заменив заполнители <...> собственными значениями. Не забудьте сохранить возвращаемые значения, например appId, passwordи tenant.

export CLIENT_NAME=<your-client-name>
az ad sp create-for-rbac --skip-assignment --name ${CLIENT_NAME}
export CLIENT_ID=$(az ad sp list --display-name ${CLIENT_NAME} | jq -r '.[0].appId')
az ad app credential reset --id ${CLIENT_ID}

Сохраните возвращаемые значения, чтобы использовать их позже.

Убедитесь, что клиент, указанный CLIENT_ID, может получить доступ к целевому хранилищу ключей. Чтобы предоставить доступ, используйте следующую команду, заменив заполнитель <your-key-vault-name>:

az keyvault set-policy \
    --name <your-key-vault-name> \
    --spn ${CLIENT_ID} \
    --secret-permissions get list \
    --certificate-permissions get list \
    --key-permissions get list

Используйте управляемое удостоверение

Чтобы включить управляемое удостоверение, назначаемое системой, или создать назначаемое пользователем управляемое удостоверение, следуйте инструкциям Настройка управляемых удостоверений для ресурсов Azure на виртуальной машине Azure с помощью Azure CLI

После получения идентификатора объекта управляемого удостоверения используйте следующую команду, чтобы создать политику доступа к Key Vault для управляемого удостоверения:

az keyvault set-policy \
    --name <your-key-vault-name> \
    --object-id <object-id-of-your-managed-identity> \
    --secret-permissions get list \
    --certificate-permissions get list \
    --key-permissions get list

Заметка

Идентификатор объекта управляемого удостоверения также называется основным идентификатором при использовании управляемого удостоверения, назначенного пользователем.

Примеры TLS/SSL на стороне клиента или сервера

Примеры протокола TLS/SSL на стороне клиента и сервера см. в разделе примеров клиентской библиотеки JCA Azure Key Vault для Java.

Дальнейшие действия