- Вопрос или проблема
- Ответ или решение
- 1. Понимание ситуации
- 2. Убедитесь в правильности установки сертификатов
- 3. Проверка свойств сертификата
- 4. Воспользуйтесь инструментами для диагностики
- 5. Импортируйте сертификаты как для текущего пользователя, так и для локальной машины
- 6. Существуют ли ограничения в ClickOnce?
- 7. Обновление документации и обращение к поддержке
- Заключение
Вопрос или проблема
Я использовал свой центр сертификации Active Directory для генерации сертификата подписания кода, совместимого с AuthentiCode, и использую его для подписи моего приложения ClickOnce и манифеста. Все работает хорошо на машинах, присоединенных к домену; диалог установки ClickOnce сообщает значение общего имени сертификата как издателя приложения, и я получаю зеленую галочку.
Однако на машинах, которые не присоединены к домену, дела обстоят по-другому. Не все идет так хорошо. Я установил корневой CA в хранилище доверенных центров сертификации и открытый ключ сертификата подписания кода как в личном, так и в хранилище доверенных издателей. Но я все равно получаю сообщение “Недоверенный издатель”, когда дважды щелкаю по файлу .application
или setup.exe
.
Вот моя настройка ClickOnce, довольно простая:
Я подтвердил, что мой подписывающий имеет требование Code Signing (1.3.6.1.5.5.7.3.3)
в его свойстве расширенного использования ключа, и что я использую Расширенный криптографический провайдер RSA и AES Microsoft.
ProcMon собирает абсолютно ошеломляющее количество данных, когда запускается Setup.exe
; я бы не знал, с чего даже начать искать среди всего этого.
Я в замешательстве, что еще попробовать. Я нахожу множество вопросов и ответов (слишком много, чтобы эффективно перечислить их здесь, если честно) для сценариев, связанных с известными поставщиками сертификатов (Sectigo и др.) на машинах как с присоединением к домену, так и без, а также множество вопросов и ответов для сценариев, касающихся сертификатов AD на присоединенных машинах, но я не нахожу ничего для моего конкретного сценария — сертификата AD на машине, не присоединенной к домену.
Согласно этим рекомендациям, если я правильно это понимаю (а я так думаю), сертификат подписания кода также должен быть импортирован в доверенные центры сертификации. Что странно… Я никогда не слышал о том, чтобы сертификат, не являющийся CA, должен находиться в хранилище доверенных CA, но что ж — я не буду жаловаться. Только я попробовал это, и это все равно не сработало.
О… стоит упомянуть… на протяжении всего этого я позаботился о том, чтобы убедиться, что я импортирую все сертификаты на уровнях текущего пользователя и локального компьютера, на всякий случай.
Это задумано? Предназначен ли ClickOnce для запрета сертификатов подписания кода AD на клиентах, не относящихся к домену?
–ИЗМЕНЕНИЕ–
В порыве безнадежности я также импортировал свой корневой CA в хранилище промежуточных CA, как для текущего пользователя, так и для локального компьютера. Я получил тот же результат: “Неизвестный издатель.”
Ответ или решение
Когда вы сталкиваетесь с проблемой "Неизвестный издатель" при использовании сертификата для подписи кода, созданного в Active Directory (AD), на не присоединенном к домену компьютере, имеются несколько моментов, на которые стоит обратить внимание для успешного решения этой задачи. Рассмотрим шаги, которые необходимо предпринять для устранения данной проблемы.
1. Понимание ситуации
Вы правильно настроили сертификат для подписи кодов и успешно протестировали его на машинах, присоединенных к домену. Однако на несоответствующих машинах возникают проблемы с доверием к подписанному приложению ClickOnce, что и вызывает сообщение "Неизвестный издатель". Это может происходить по нескольким причинам.
2. Убедитесь в правильности установки сертификатов
Вам уже известно о необходимости установки корневого сертификата центра сертификации (CA) в хранилище Trusted CAs, что вы и сделали. Однако также стоит проверить:
-
Сертификат кодовой подписи: Он должен быть установлен в хранилище персональных сертификатов (Personal) пользователя, а также в хранилище "Доверенные издатели" (Trusted Publishers).
-
Принадлежность Корневого CA: Убедитесь, что корневой сертификат действительно установлен и корректно распознан в хранилище Trusted Root Certification Authorities. Также проверьте наличие любых промежуточных сертификатов, которые могут быть задействованы.
3. Проверка свойств сертификата
Убедитесь, что сертификат для подписи кода имеет установленный Extended Key Usage (EKU), включающий Code Signing (1.3.6.1.5.5.7.3.3)
. Это уже отмечено, но также проверьте, что сертификат не истек и не был отзывным.
4. Воспользуйтесь инструментами для диагностики
Если использование ProcMon создает много данных и усложняет диагностику, возможно, стоит рассмотреть простые инструменты, такие как certutil
, который позволяет проверять и отображать статус сертификатов:
certutil -verify -urlfetch <путь к вашему сертификату>
Эта команда может помочь выявить проблемы с цепочкой доверия.
5. Импортируйте сертификаты как для текущего пользователя, так и для локальной машины
Вы уже отметили, что импортировали сертификаты как для текущего пользователя, так и для локальной машины. Это правильный подход, так как ClickOnce может работать от имени различных пользователей.
6. Существуют ли ограничения в ClickOnce?
Иногда ClickOnce может вести себя иначе на неконтролируемых машинах, чем на доменных. С точки зрения безопасности, ClickOnce может устанавливать дополнительные требования к доверенным сертификатам. В некоторых случаях требуется также и установка в хранилище "Доверенные сертификаты" (Trusted Certificate Store).
7. Обновление документации и обращение к поддержке
Поскольку вы уже перепроверили имеющиеся гайды и документацию, стоит обратиться к официальной поддержке Microsoft или обратиться к форумам, где обсуждаются подобные вопросы. Другие разработчики могут иметь аналогичный опыт и поделиться своими решениями.
Заключение
Проблема "Неизвестный издатель" может быть сложной, особенно когда используется сертификат, созданный в Active Directory. Следуя описанным шагам и выполняя детальную проверку всех сертификатов, вы повысите шансы на успешное решение. Не забывайте, что работа с сертификатами часто требует терпения и внимательности к деталям.