ivchpavel, в личку тут писать нельзя (кроме админов видимо).
Готового решения нет, есть самописная реализация конкретно под мои задачи.
Но если в общем, то процесс такой:
1. Экспортируем публичный ключ с токена
2. Генерируем *.dig файл для подписанного бинарника на машине, где нет токен (но должен быть файл, например my.cer с публичной экспортированной подписью):
signtool sign /v /f my.cer /fd SHA256 /dg . "my.exe"
3. Подписываем данные из dig-файла. В нём просто просто хеш, закодированный, в base64. Подписывать можно любым "внешним" софтом. Надо только понимать, что кому-то на вход нужны бинарные данные, а не base-64 (тогда его надо будет раскодировать).
4. Подписанные данные также сохраняем в base64 в файл my.exe.dig.signed и помещаем в папку рядом с основным и dig файлом.
5. Добавляем подпись в файл
signtool sign /di . "my.exe"
6. Ну и добавляем timestamp
signtool timestamp /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td SHA256 "my.exe"
Всё что выше "my" - надо заменить на свои значение (в одном случае - свой сертификат, во втором - свой подписываемый файл).
Подписание msix в таком случае не работает - там процесс сложнее (но его тоже удалось решить).
По указанному выше принципу у меня был реализован свой веб-сервер с физическим токеном, который принимает base64 текст, подписывает его и отправляет обратно. А в ci/cd уже вся работа с signtool по генерации dig-файлов и добавлению итоговой подписи.
Есть более простой вариант, но более накладный с точки зрения сетки - можно просто передавать полностью бинарный файл и подписывать через signtool непосредственно на машине с физическим токеном (инструкцию, как в данном случае запомнить пин, можно запросить у Аверченко Кирилла, он направляет её на почту).