Использование 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 в classpath 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.

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