Как правильно подписать код с помощью сертификата, хранящегося в Azure Key Vault, с включенной цепочкой доверия?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно подписать код с помощью сертификата, хранящегося в Azure Key Vault, с включенной цепочкой доверия?

Сообщение Anonymous »

Наш центр сертификации GlobalSign выдал сертификат подписи кода, предназначенный для HSM. Я создал хранилище ключей с лицензией Premium в Azure, поскольку базовая версия не поддерживает HSM. Затем я создал сертификат в Key Vault, используя следующую политику выдачи:
  • Тип центра сертификации (CA): Сертификат, выданный
    неинтегрированный CA
  • Субъект: C=US, L=Doeville, O=JohnDoe, CN=JohnDoe,
    E=johndoe@ doe.com
  • DNS-имена: 0 DNS-имен
  • Срок действия (в месяцах): < strong>24
  • Тип контента: PKCS#12
  • Включено: Да

Расширенная настройка политики
  • Расширенная Использование ключей (EKU): 1.3.6.1.5.5.7.3.3
  • Флаги использования ключей X.509: Цифровая подпись, шифрование ключей
  • Повторно использовать ключ при продлении?: Нет
  • Экспортируемый закрытый ключ?: Нет
  • Тип ключа: RSA-HSM
  • Размер ключа: 4096
    Включить прозрачность сертификата?: Да
  • Тип сертификата: {Пусто
После того как он был помещен в хранилище ключей, я нажал «Операция с сертификатом» и загрузил CSR.
Я перешел по ссылке для скачивания, предоставленной Global Sign, и скопировал и вставил КСР. После того, как сертификаты были сгенерированы, у меня появилась страница, на которой я мог скачать цифровой сертификат и 2 промежуточных сертификата. Имена файлов были: OS123456789.cer, промежуточный1.cer и промежуточный2.cer
Затем я вернулся в Azure Key Vault и нажал «Объединить подписанный запрос». Затем я выбрал OS123456789. cer, и все прошло успешно.
Затем я начал работать над использованием jarsigner для подписи своих jar-файлов.
Я скачал azure-security-keyvault-jca- 2.8.1.jar и поместил его в %JAVA_HOME&/jre/lib/ext
Я использую следующую команду jarsigner:

Код: Выделить всё

jarsigner -keystore NONE  -storetype AzureKeyVault -verbose  -storepass "" -tsa http://timestamp.globalsign.com/tsa/r6advanced1 -providerName AzureKeyVault -providerClass com.azure.security.keyvault.jca.KeyVaultJcaProvider -J"-Dazure.keyvault.uri=$KEYVAULT_URL" -J"-Dazure.keyvault.tenant-id=$TENANT" -J"-Dazure.keyvault.client-id=$CLIENT_ID" -J"-Dazure.keyvault.client-secret=$CLIENT_SECRET" -signedjar "signed.jar" "unsigned.jar" $CERT_ALIAS
Вывод подписи выглядит следующим образом:

Код: Выделить всё

updating: META-INF/MANIFEST.MF
adding: META-INF/GLOBALSI.SF
requesting a signature timestamp
TSA location: http://timestamp.globalsign.com/tsa/r6advanced1
adding: META-INF/GLOBALSI.RSA
A BUNCH OF FILES
signing: clientlogging.properties
adding: JNLP-INF/
signing: JNLP-INF/APPLICATION_TEMPLATE.JNLP
>>> Signer
X.509, [email protected], CN=JohnDoe, O=JohnDoe, L=DoeVille, C=US
[trusted certificate]
>>> TSA
X.509, CN=Globalsign TSA for CodeSign1 - R6 - 202311, O=GlobalSign nv-sa, C=BE
[certificate is valid from 07/11/23 18:13 to 09/12/34 18:13]
X.509, CN=GlobalSign Timestamping CA - SHA384 - G4, O=GlobalSign nv-sa, C=BE
[certificate is valid from 20/06/18 02:00 to 10/12/34 01:00]
X.509, CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6
[trusted certificate]

jar signed.

The timestamp will expire on 2034-12-09.
По-моему, пока все выглядит хорошо.
Однако, когда я бегу:

Код: Выделить всё

jarsigner -verify -verbose -certs signed.jar
Я получаю следующий результат:

Код: Выделить всё

s 291951 Tue Sep 24 12:09:10 CEST 2024 META-INF/MANIFEST.MF

>>> Signer
X.509, [email protected], CN=JohnDoe, O=JohnDoe, L=DoeVille, C=US
[certificate is valid from 20/09/24 16:00 to 03/09/27 14:19]
[Invalid certificate chain: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
>>> TSA
X.509, CN=Globalsign TSA for CodeSign1 - R6 - 202311, O=GlobalSign nv-sa, C=BE
[certificate is valid from 07/11/23 18:13 to 09/12/34 18:13]
X.509, CN=GlobalSign Timestamping CA - SHA384 - G4, O=GlobalSign nv-sa, C=BE
[certificate is valid from 20/06/18 02:00 to 10/12/34 01:00]
X.509, CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6
[trusted certificate]

292002 Tue Sep 24 12:09:12 CEST 2024 META-INF/GLOBALSI.SF
8401 Tue Sep 24 12:09:12 CEST 2024 META-INF/GLOBALSI.RSA
0 Tue Sep 10 16:47:38 CEST 2024 META-INF/

A BUNCH OF FILES

sm 1111 Tue Sep 10 16:47:36 CEST 2024 JNLP-INF/APPLICATION_TEMPLATE.JNLP
[entry was signed on 24/09/24 12:09]
>>> Signer
X.509, [email protected], CN=JohnDoe, O=JohnDoe, L=DoeVille, C=US
[certificate is valid from 20/09/24 16:00 to 03/09/27 14:19]
[Invalid certificate chain: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
>>> TSA
X.509, CN=Globalsign TSA for CodeSign1 - R6 - 202311, O=GlobalSign nv-sa, C=BE
[certificate is valid from 07/11/23 18:13 to 09/12/34 18:13]
X.509, CN=GlobalSign Timestamping CA - SHA384 - G4, O=GlobalSign nv-sa, C=BE
[certificate is valid from 20/06/18 02:00 to 10/12/34 01:00]
X.509, CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6
[trusted certificate]

s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope

Signed by "[email protected], CN=JohnDoe, O=JohnDoe, L=DoeVille, C=US"
Digest algorithm: SHA-256
Signature algorithm: SHA256withRSA, 4096-bit key
Timestamped by "CN=Globalsign TSA for CodeSign1 - R6 - 202311, O=GlobalSign nv-sa, C=BE" on Tue Sep 24 10:09:12 UTC 2024
Timestamp digest algorithm: SHA-256
Timestamp signature algorithm: SHA256withSHA256withRSA, 3072-bit key

jar verified.

Warning:
This jar contains entries whose certificate chain is invalid.  Reason: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

The signer certificate will expire on 2027-09-03.
The timestamp will expire on 2034-12-09.
Проверка завершается неудачей со следующим предупреждением:

Код: Выделить всё

This jar contains entries whose certificate chain is invalid. Reason: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Насколько я понимаю, это происходит потому, что он не может определить цепочку доверия к ЦС.
Затем я использовал keytool для импорта промежуточных сертификатов в мое локальное хранилище ключей. находится в моем домашнем каталоге. Затем я снова подписал файлы jar, и на этот раз jarsigner смог проверить файл jar без каких-либо предупреждений.
Однако, когда я затем развертываю приложение Java, пользователи загружают файл jnlp и при попытке установить Java-приложение появляется всплывающее окно с предупреждением о том, что подписанному приложению не доверяют.
Мы используем Java 8. Пробовали как последние версии Amazon Corretto, так и Oracle
Мои вопросы:
  • Есть ли у вас идеи, как решить эту проблему?
  • Можно ли включить промежуточные сертификаты при объединении подписанного запроса и решит ли это проблему?
Спасибо за любую помощь, которую вы можете оказать.

Подробнее здесь: https://stackoverflow.com/questions/790 ... vault-with
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как правильно кодовый знак с использованием сертификата, хранящегося в Vault Azure Key с включенной цепочкой доверия?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • VSTS Build Pipeline: тест не сбои, подключаясь к Vault Azure Key Vault
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Azure Key Vault Vault в приложении .NET 6 Container перед Build ()
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Azure Key Vault Vault в приложении .NET 6 Container перед Build ()
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как я могу использовать Secrets.json и Vault Key Vault без изменения переменных?
    Гость » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Гость

Вернуться в «JAVA»