Попробовав все эти решения (и многое другое), я обнаружил, что проблема заключается в другом месте. Для людей, которые испытывают те же страдания, что и я, после покупки сертификата, я поделюсь решением своей проблемы.
Поведение
Я понимаю, что 'sign' применяет строгое имя, а не аутентичный код к DLL или EXE. Вот почему signtool будет работать в этом случае, но 'sign' в Visual studio не будет работать.
Причина
В прошлом у меня был опыт работы с сертификатами Verisign. Они имеют KeySpec=2
в сертификате - который используется с функциональностью 'sign' в Visual Studio. Эти сертификаты отлично работают как для Visual Studio, так и для signtool.
Я теперь купил сертификаты у Comodo, у которых неверный KeySpec=1
в сертификатах подписи кода. Это означает, что эти сертификаты хорошо работают с signtool (authenticode), но не с сильными именами (выпадающий список).
Решение
Существует два способа решения этой проблемы:
- Создайте отдельный сертификат для своего строгого имени, используя
sn -k [name].snk
. Подпишите сборку с помощью snk, а затем используйте signtool с сертификатом подписи кода, чтобы подписать DLL / EXE с помощью подписи authenticode. Хотя это кажется странным, насколько я понимаю, это правильный способ работы с сертификатами, поскольку строгие имена имеют другое назначение, чем authenticode (подробности о том, как это работает, см. Также по этой ссылке ).
- Импортируйте ваш сертификат как
KeySpec=2
. Процедура для этого подробно описана здесь .
Поскольку я хочу использовать несколько строгих имен, в настоящее время я использую параметр (1), хотя вариант (2) также работает.
Чтобы гарантировать, что это решение никогда не потеряется в будущем, вот процедура решения 2:
- Используя MMC «Сертификаты», экспортируйте существующий набор ключей (
KeySpec=1
) в файл PFX. Примечание: Пожалуйста, сделайте резервную копию этого файла в безопасном месте и проверьте, можно ли импортировать файл нормально на другой компьютер, если вы действительно хотите воспроизвести его безопасно!
- Удалить существующий сертификат из крипто-хранилища (stlll с помощью MMC).
- Открыть приглашение CMD.
- Импортируйте файл PFX с помощью этой команды:
certutil -importPFX -user <pfxfilename> AT_SIGNATURE
- Введите пароль для pfx при появлении запроса.
Теперь у вас должен быть набор ключей / сертификат с KeySpec=2
. При необходимости вы можете теперь экспортировать это в другой файл PFX, используя MMC снова.