Как я могу вызвать доверенную подпись Azure из ОС Linux?

Моя компания недавно была удивлена ​​истечением срока действия сертификата подписи кода, и ей пришлось изо всех сил искать замену сертификату, только чтобы обнаружить, что с прошлого года сфера подписывания кода сместилась в сторону системы на основе USB-ключей, где сертификаты больше не используются. обычно доступны напрямую. Изучая альтернативы, мы остановились на новой службе доверенной подписи Azure, которая предлагает своего рода «подпись как услугу», и мы смогли настроить наш процесс сборки так, чтобы использовать его достаточно эффективно в контексте Windows. Теперь мы хотим правильно включить его в наш современный конвейер CI/CD, но несколько лет назад мы перешли на время сборки и выполнения Linux, и похоже, что не существует очевидного способа вызвать Azure Trusted Signing из среды выполнения Linux. .

Основной поддерживаемый способ (согласно документации здесь https://learn.microsoft.com/en-us/azure/trusted-signing/how-to-signing-integrations), по-видимому, заключается в использовании специальной версии Signtool.exe, который, похоже, загружает отдельную библиотеку MS, которая отправляет веб-запрос к ресурсу подписи в Azure. Это то, что я раньше работал, и, похоже, это то, что скрыто под всеми перечисленными альтернативами (github/Azure Devops action, powershell, sdk), но все они кажутся совершенно новыми и не имеют никакой документации/инструкций и никого. еще спрашиваю о них, и ни один из них не работает вне контекста Windows.

Я попытался использовать Wine 9 для запуска моей рабочей установки Signtool.exe из контекста Ubuntu 20.04 с чистой установкой, но я получил ошибку, которую не могу понять, как устранить:

wine "./Microsoft.Windows.SDK.BuildTools_10.0.22621.0/signtool.exe" sign /debug /v /fd SHA256 /tr "http://timestamp.acs.microsoft.com" /td SHA256 /dlib "./Microsoft.Trusted.Signing.Client_1.0.53/Azure.CodeSigning.Dlib.dll" /dmdf "./signinfo.json" "/home/asdf.exe"
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
00f8:err:module:import_dll Library MFC42.dll (which is needed by L"Z:\\home\\Microsoft.Windows.SDK.BuildTools_10.0.22621.0\\signtool.exe") not found
00f8:err:module:loader_init Importing dlls for L"Z:\\home\\Microsoft.Windows.SDK.BuildTools_10.0.22621.0\\signtool.exe" failed, status c0000135

Я успешно запустил Winetricks mfc42 и убедился, что .dll находится в виртуальной папке syswow64, и попытался переместить папку, содержащую ресурсы Signtool, в каталог виртуальных программных файлов, но все безрезультатно. Версия Signtool.exe, которую я использую, является 64-битной, и я убедился, что моя установка Wine работает, без проблем запустив Wine notepad.exe.

В качестве обходного пути я сейчас работаю над функцией Azure, которую моя сборка может вызывать, когда придет время подписывать .exe-файлы (все для того, чтобы я мог находиться в контексте Windows), но это представляет собой огромный риск для безопасности, поскольку я по сути, просто создаю URL-адрес, по которому любой, кто находится за моим брандмауэром, может нажать, чтобы подписать все, что он хочет.

Почему использование Wine для запуска Signtool.exe не работает? Есть ли лучший способ выполнить то, что я пытаюсь сделать, предполагая, что я не хочу переключаться на другого поставщика подписи кода и хочу продолжать использовать доверенную подпись Azure?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Доверенная подпись Azure поддерживается Jsign, кроссплатформенной альтернативой Signtool.exe с открытым исходным кодом. Вино не требуется. Синтаксис выглядит следующим образом:

jsign --storetype TRUSTEDSIGNING \
      --keystore weu.codesigning.azure.net \
      --storepass <api-access-token> \
      --alias <account>/<profile> application.exe

Поддержка доверенной подписи Azure станет частью предстоящего выпуска 7.0. Тем временем вам придется создать проект самостоятельно (с помощью mvn package -DskipTests) или загрузить последние артефакты CI с GitHub Actions.

(Отказ от ответственности: я являюсь автором этого проекта)

Я взял версию SHAPSHOT 7.0 с сайта GitHub, и она сработала просто великолепно! Спасибо! Выполнение вызовов веб-запросов самостоятельно кажется наиболее разумным вариантом для реализации независимого от платформы доверенного клиента подписи.

Arch 26.07.2024 23:06

Другие вопросы по теме

Создать пул в пакетном режиме Azure с назначенным пользователем управляемым удостоверением
Как создать идентификатор непрерывной последовательности независимо от запусков в Databricks
Функция Azure с проблемой сети речи Azure AI (WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED)
Я не могу извлечь таблицы .sql CREATE TABLE для каждой таблицы в базе данных SQL Azure в репозитории Azure
Уведомление конвейера Azure DevOps для прямого сообщения команд
Как добавить пользовательские утверждения для пользователей Azure AD
Azure: пакета под названием «dynlm» не существует
Пока включено иерархическое пространство имен, невозможно загрузить большой двоичный объект с метаданными hdi_isfolder
Можете ли вы создать «Потоки пользователей» в Azure с помощью учетной записи с оплатой по мере использования?
Пользовательское утверждение Entra внешнего идентификатора в токене идентификатора клиента, а не в ClaimsPrincipal пользователя веб-API ASP.NET Core