Использование Azure Key Vault для доставки TLS/SSL-сертификатов в JVM
В этой статье описывается, как интегрировать Azure Key Vault в JVM для доставки TLS/SSL-сертификатов.
Добавление поставщика JCA в файл java.security
Чтобы зарегистрировать поставщика JCA, JVM должен знать об этом. Чтобы выполнить эту задачу, выполните следующие действия.
Создайте копию файла java.security
в установке JVM и присвойте файлу my.java.security .В файле найдите строку
security.provider.<maximum-value>
. Замените заполнитель<maximum-value>
максимальным значением в этой позиции среди всех записей. Например,security.provider.13=SunPKCS11
.Увеличьте число этой записи на 1. Например,
security.provider.13
должен статьsecurity.provider.14
.Добавьте следующую строку:
security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
Заметка
Убедитесь, что каждая запись security.provider.<X>
имеет разное числовое значение для <X>
и сохраните их в возрастающем порядке, начиная с 1.
Запуск приложения
Чтобы запустить приложение, выполните следующие действия и замените заполнители <...>
собственными значениями:
Добавьте файл azure-security-keyvault-jca-X.Y.Z.jar в класспас. Например, если вы хотите интегрироваться с Tomcat 9, необходимо добавить полный путь к файлу azure-security-keyvault-jca-X.Y.Z.jar в путь к классу Java с помощью tomcat9w.exe.
Добавьте
-Djava.security.properties==my.java.security
в командную строку.Добавьте
-Dazure.keyvault.uri=<your-keyvault-uri>
в командную строку, чтобы указать, какой azure Key Vault следует использовать. Например,-Dazure.keyvault.uri=https://some.vault.azure.net/
.Добавьте аргументы, указанные в следующем списке, в зависимости от сценария:
При проверке подлинности с помощью служебной учетной записи добавьте следующие аргументы:
-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.