Почему signtool.exe находит сертификат только при запуске от имени администратора? - PullRequest
3 голосов
/ 12 июня 2019

Я устанавливаю новый ноутбук для разработки и установил самостоятельно выданный сертификат подписи кода.Я вижу его в certmgr в разделе «Личные сертификаты моих текущих пользователей».

При попытке выполнить сборку из командной строки разработчика для Visual Studio 2017 я получаю:
error : SignTool Error: No certificates were found that met all the given criteria.

Это всегдаотлично работал на моем старом ноутбуке.

Я обнаружил, запускаю ли я ту же сборку из командной строки после запуска как admin , что signtool завершается успешно и может найти сертификат.

Это случилось с 3/4 коллегами, когда мы установили новые ноутбуки.Один парень в порядке и может подписаться без участия администратора.На наших старых ноутбуках нам никогда не приходилось работать с правами администратора.

Я пытался поискать в Google, чтобы найти причину, потому что я не знал, что работа с правами администратора или нет должна иметь какое-либо влияние на это.Я не нашел никаких ссылок на эту проблему.

Как мы можем использовать signtool.exe, не запуская его от имени администратора?

Когда он не работает от имени администратора, это похоже на фильтр закрытого ключашаг, на котором отфильтровывается сертификат, который я ожидаю выбрать:

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************

C:\>signtool sign /v /debug /ph  /i "<issuedby>"  /fd sha256 /td sha256 "C:\TestSign.dll"

The following certificates were considered:
    Issued to: Scott Langham
    Issued by: <issuedby>
    Expires:   Sun Sep 25 09:54:55 2022
    SHA1 hash: <a_hash>

    Issued to: Scott Langham
    Issued by: <issuedby_somethingelse>
    Expires:   Wed May 13 15:51:14 2020
    SHA1 hash: <b_hash>

After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

Я удостоверился, что версия signtool.exe, которую я использую, совпадает с той, которую использует мой коллега, у которого есть этотработает использует (10.0.18362.1).Мне удалось обнаружить любые другие различия между нашими системами.

Ответы [ 3 ]

1 голос
/ 18 июля 2019

Подобно тому, что сказал @Baget, я бы сравнил сертификаты на вашем компьютере с сертификатом вашего коллеги, который может успешно выполнить команду SignTool.exe без маркера повышения прав. Вот часть PowerShell, чтобы помочь вам:

get-childitem -Path Cert:\ | foreach-object ({
    $location = $_.Location
    foreach($store in $_.StoreNames.Keys) {         
        get-childitem -Path "Cert:\$location\$store" | foreach-object ({
            $thumb = $($_.ThumbPrint)
            $issuer = $($_.Issuer)

            if ($issuer -eq "CN=EXAMPLE, DC=EXAMPLE, DC=EXAMPLE, DC=EXAMPLE") {
                write-host "$location $store $issuer"
            }
        })
    }
})

Имейте в виду, что выходные данные выше могут незначительно отличаться, если вы работаете как обычный пользователь и работаете как администратор.

Наконец, у вас и вашего коллеги одинаковые настройки UAC? ​​

0 голосов
/ 18 июля 2019

Сначала вы получаете такую ​​ошибку и используете Visual Studio, а затем смотрите вкладку подписи в свойствах проекта.Вы увидите ранее назначенную подпись (сильная сборка)

Если вы введете правильный пароль здесь:

Если ваша среда такая же, как среда, в которой написан проект, вы пропуститеэта ошибка.Посмотрите сообщение об ошибке

Причины этой ошибки:

1 - Visual Studio нужны некоторые функции при использовании файла сертификата для подписи надежной сборки.

Подписывание манифеста ClickOnce и подпись сборки с использованием строгого имени с использованием страницы подписи Visual Studio Project Designer

Вы можете попробовать этот код, чтобы определить

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

2- Эти настройки могут различаться для разных компьютеров, и Windows не записывает эти настройки в настройки среды по умолчанию. проверьте путь конфигурации

Эта часть просто глубокая заметка!Если вас не интересует вопрос, вы должны добавить свой личный файл хранилища ключей в заголовок запроса и все это.Мои любимые шаги по созданию сертификата на этот пост

0 голосов
/ 11 июля 2019

В Windows есть два хранилища сертификатов: хранилище пользователей и хранилище компьютеров. Вероятно, вы установили сертификат на локальный компьютер или установили его при работе с повышенными правами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...