Подписывание сборок .NET. Sn.exe и рутокен
Коллеги, добрый день!
Не смог найти информацию, как сделать отложенную подпись .NET сборки с помощью Рутокен.
Есть такая возможность?
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Рутокен → Техническая поддержка пользователей → Подписывание сборок .NET. Sn.exe и рутокен
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Коллеги, добрый день!
Не смог найти информацию, как сделать отложенную подпись .NET сборки с помощью Рутокен.
Есть такая возможность?
kiselev, добрый день! Через какое ПО вы планируете подписывать - signtool?
kiselev, добрый день! Через какое ПО вы планируете подписывать - signtool?
Sn.exe (https://learn.microsoft.com/ru-ru/dotne … -name-tool), в сборке указана отложенная подпись или публичная, в разных случаях разная.
Раньше подписывали SNK в pipeline Gitlab.
PFX для signtool экспортировали из хранилища.
kiselev, расскажите, пожалуйста, с какими именно сложностями вы столкнулись?
С Рутокен ЭЦП 3.0 возможно работать с использованием "Microsoft Base Smart Card Crypto Provider" по аналогии с https://stackoverflow.com/questions/997 … cate-store
kiselev, расскажите, пожалуйста, с какими именно сложностями вы столкнулись?
С Рутокен ЭЦП 3.0 возможно работать с использованием "Microsoft Base Smart Card Crypto Provider" по аналогии с https://stackoverflow.com/questions/997 … cate-store
В примере
then post-build, sign using sn.exe -Rc "your-container-name" "key.snk"
Как указать сертификат на ruToken вместо "key.snk"?
kiselev, мы не разработчики sn.exe, но насколько мы понимаем инструкцию:
1.1) В Панели Управления Рутокен вы регистрируете сертификат
1.2) Там же вы получаете "your-container-name". Обычно это GUID. Скопировать его можно через меню по клику правой кнопкой мыши.
2) Затем указываете:
sn.exe -c "Microsoft Base Smart Card Crypto Provider"
3) Вам нужно получить открытый ключ:
There are two options from here: you tell sn.exe to create a key that contains only the public key and delay sign with that key (check the box at the bottom of the "Signing" tab in the project properties)
4) Используя открытый ключ (key.snk) вызвать:
sn.exe -Rc "your-container-name" "key.snk"
Также можно воспользоваться более подробным руководством: http://matthewdippel.blogspot.com/2017/ … embly.html
kiselev, мы не разработчики sn.exe, но насколько мы понимаем инструкцию:
1.1) В Панели Управления Рутокен вы регистрируете сертификат
1.2) Там же вы получаете "your-container-name". Обычно это GUID. Скопировать его можно через меню по клику правой кнопкой мыши.
2) Затем указываете:sn.exe -c "Microsoft Base Smart Card Crypto Provider"
3) Вам нужно получить открытый ключ:
There are two options from here: you tell sn.exe to create a key that contains only the public key and delay sign with that key (check the box at the bottom of the "Signing" tab in the project properties)
4) Используя открытый ключ (key.snk) вызвать:
sn.exe -Rc "your-container-name" "key.snk"
Также можно воспользоваться более подробным руководством: http://matthewdippel.blogspot.com/2017/ … embly.html
kiselev, покажите, пожалуйста, скриншот вкладки Сертификаты из Панели управления Рутокен
kiselev, попробуйте передать имя контейнера 1:1 без дефисов, как на скриншоте.
kiselev, попробуйте передать имя контейнера 1:1 без дефисов, как на скриншоте.
Без дефисов нельзя, не находит контейнер.
Да и дело не в этом, посмотрите внимательно, "Сертификат с неизвлекаемоей ключевой парой".
Экспортировать даже публичный ключ нельзя.
Собственно, давайте перестанем гуглить и вернемся к первоначальному вопросу - "Есть возможность подписать сборки хотя бы публичным ключом используя руТокен?".
Может ваши разработчики знают?
kiselev,
Согласно документации на sn.exe:
https://learn.microsoft.com/ru-ru/dotne … -name-tool
Средство строгих имен поддерживает пары открытого и закрытого ключей, созданные с помощью идентификатора алгоритма AT_SIGNATURE. При использовании пар открытого и закрытого ключей, созданных с помощью алгоритма AT_KEYEXCHANGE, возникает ошибка.
При том, что AT_KEYEXCHANGE более универсальна - ей возможно подписывать и шифровать - поэтому большинством Удостоверяющих центров выпускаются именно такие пары.
Убедиться какая у вас можно вызвав и посмотрев в выводе на поле KeySpec
certutil -store -v My
kiselev,
Согласно документации на sn.exe:
https://learn.microsoft.com/ru-ru/dotne … -name-toolСредство строгих имен поддерживает пары открытого и закрытого ключей, созданные с помощью идентификатора алгоритма AT_SIGNATURE. При использовании пар открытого и закрытого ключей, созданных с помощью алгоритма AT_KEYEXCHANGE, возникает ошибка.
При том, что AT_KEYEXCHANGE более универсальна - ей возможно подписывать и шифровать - поэтому большинством Удостоверяющих центров выпускаются именно такие пары.
Убедиться какая у вас можно вызвав и посмотрев в выводе на поле KeySpec
certutil -store -v My
Вы опять гуглите не думая. Сертификат на токене а не в хранилище.
Правильная команда
certutil -SCInfo
================ Сертификат 0 ================
--- Устройство чтения: Aktiv Rutoken ECP 0
--- Карта: Rutoken ECP
Поставщик = Aktiv ruToken CSP v1.0
Контейнер ключа = 1e75e1ce7e8147c58c7afa2c9ceda962
Отсутствует ключ AT_SIGNATURE для устройства чтения: Aktiv Rutoken ECP 0
Серийный номер: 26c3c43ad5f9769b527515f2
Поставщик: CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
NotBefore: 21.02.2024 14:57
NotAfter: 21.02.2027 14:57
Субъект: E=info@ascon.ru, CN=LLC ASCON-BUSINESS-SOLUTIONS, O=LLC ASCON-BUSINESS-SOLUTIONS, L=Kolomna, S=Moscow Oblast, C=RU
Не корневой сертификат
Хеш сертификата(sha1): 4f 18 d5 42 b0 2c 4d 7f 1d 63 38 3c 0a aa b2 eb 1a 3f d9 75
Выполнение теста сопоставления открытого ключа AT_KEYEXCHANGE...
Тест сопоставления открытого ключа выполнен успешно
Контейнер ключа = 1e75e1ce7e8147c58c7afa2c9ceda962
Поставщик = Aktiv ruToken CSP v1.0
ProviderType = 1
Флаги = 1
0x1 (1)
KeySpec = 1 -- AT_KEYEXCHANGE
Закрытый ключ удостоверяет подлинность
Выполнение проверки цепочки сертификатов...
Цепочка проверена
Вход со смарт-картой: Недопустимая цепочка на смарт-карте
dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000)
dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)
ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)
HCCE_LOCAL_MACHINE
CERT_CHAIN_POLICY_BASE
-------- CERT_CHAIN_CONTEXT --------
ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
ChainContext.dwRevocationFreshnessTime: 51 Minutes, 37 Seconds
SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
SimpleChain.dwRevocationFreshnessTime: 51 Minutes, 37 Seconds
CertContext[0][0]: dwInfoStatus=102 dwErrorStatus=0
Issuer: CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
NotBefore: 21.02.2024 14:57
NotAfter: 21.02.2027 14:57
Subject: E=info@ascon.ru, CN=LLC ASCON-BUSINESS-SOLUTIONS, O=LLC ASCON-BUSINESS-SOLUTIONS, L=Kolomna, S=Moscow Oblast, C=RU
Serial: 26c3c43ad5f9769b527515f2
75d93f1aebb2aa0a3c38631d7f4d2cb042d5184f
Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
CRL (null):
Issuer: CN=gsgccr45codesignca2020CA OCSP Responder, O=GlobalSign nv-sa, C=BE
ThisUpdate: 01.03.2024 10:47
NextUpdate: 05.03.2024 10:47
751cee963c52cfd9384b85ec9d13b79e4f6f2526
Issuance[0] = 1.3.6.1.4.1.4146.1.50
Issuance[1] = 2.23.140.1.4.1
Application[0] = 1.3.6.1.5.5.7.3.3 Подписывание кода
CertContext[0][1]: dwInfoStatus=102 dwErrorStatus=0
Issuer: CN=GlobalSign Code Signing Root R45, O=GlobalSign nv-sa, C=BE
NotBefore: 28.07.2020 3:00
NotAfter: 28.07.2030 3:00
Subject: CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
Serial: 77bd0e03a1b708f854ab067210d90447
327a435d08b6d0ea7cbeaf64ad2e9eb2ed46217a
Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
CRL (null):
Issuer: CN=GlobalSign Code Signing Root R45 - OCSP 1.2 20240207, O=GlobalSign nv-sa, C=BE
ThisUpdate: 01.03.2024 10:04
NextUpdate: 05.03.2024 10:04
637f31ac89b95480f0472b428c3b0a43a9fa5e1a
Issuance[0] = 1.3.6.1.4.1.4146.1.50
Issuance[1] = 2.23.140.1.4.1
Application[0] = 1.3.6.1.5.5.7.3.3 Подписывание кода
CertContext[0][2]: dwInfoStatus=10c dwErrorStatus=0
Issuer: CN=GlobalSign Code Signing Root R45, O=GlobalSign nv-sa, C=BE
NotBefore: 18.03.2020 3:00
NotAfter: 18.03.2045 3:00
Subject: CN=GlobalSign Code Signing Root R45, O=GlobalSign nv-sa, C=BE
Serial: 7653feac75464893f5e5d74a483a4ef8
b8844cd93680002cce1b9ce5ca9e610c4631fc4e
Element.dwInfoStatus = CERT_TRUST_HAS_NAME_MATCH_ISSUER (0x4)
Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
Application[0] = 1.3.6.1.5.5.7.3.3 Подписывание кода
Exclude leaf cert:
d7158137d43d86f75c93d576520384669446feb6
Full chain:
4cbb63754674a76f20234a5f35dc6844bd92c6c2
------------------------------------
Проверенные политики выдачи:
1.3.6.1.4.1.4146.1.50
2.23.140.1.4.1
Проверенные политики применения:
1.3.6.1.5.5.7.3.3 Подписывание кода
Отображен сертификат AT_KEYEXCHANGE для устройства чтения: Aktiv Rutoken ECP 0
SCardGetCardTypeProviderName: Не удается найти указанный файл. 0x2 (WIN32: 2 ERROR_FILE_NOT_FOUND)
Не удается получить имя поставщика для Rutoken ECP
--------------===========================--------------
kiselev, вам необходима ключевая пара AT_SIGNATURE, которой сейчас у вас нет на устройстве.
kiselev, вам необходима ключевая пара AT_SIGNATURE, которой сейчас у вас нет на устройстве.
ОК. Закрывайте.
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Рутокен → Техническая поддержка пользователей → Подписывание сборок .NET. Sn.exe и рутокен