Устранение ошибок подписи пакета приложения

Сбой развертывания приложения может быть вызван сбоем проверки цифровой подписи пакета приложения. Узнайте, как распознать эти ошибки и что делать с ними.

При развертывании упаковаемого приложения Windows Windows всегда пытается проверить цифровую подпись в пакете приложения. Сбои во время развертывания блока проверки подписей пакета. Но почему пакет не проверял, может быть не очевидным. В частности, если вы подписываете пакеты с помощью частных сертификатов для локального тестирования, часто необходимо управлять доверием для этих сертификатов. Неправильная конфигурация доверия сертификатов может привести к сбоям проверки подписи.

Это важно знать

Технологии

Необходимые компоненты

Instructions

Шаг 1. Изучение журналов событий для диагностических сведений

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

Получение кода ошибки из журналов событий

  1. Запустите eventvwr.msc.

  2. Перейдите к журналам Microsoft>Windows Просмотр событий (локальные>)>приложения и службы.

  3. Первый журнал проверка — AppxPackagingOM>Microsoft-Windows-AppxPackaging/Operational.

  4. Ошибки, связанные с развертыванием, записываются в AppXDeployment-Server>Microsoft-Windows-AppXDeploymentServer/Operational.

    Для ошибок развертывания найдите последнее событие ошибки 404. Это событие ошибки предоставляет код ошибки и описание причины сбоя развертывания. Если событие ошибки 465 предшествовало событию 404, возникла проблема с открытием пакета.

Если ошибка 465 не произошла, ознакомьтесь с общими сведениями о упаковке, развертывании и запросе приложений Windows. В противном случае ознакомьтесь с этой таблицей для распространенных кодов ошибок, которые могут отображаться в строке ошибки для события ошибки 465:

Код ошибки Ошибка Описание Предложение
0x80073CF0 ERROR_INSTALL_OPEN_PACKAGE_FAILED Не удалось открыть пакет приложения. Эта ошибка обычно указывает на проблему с пакетом. Необходимо создать и подписать пакет еще раз. Дополнительные сведения см. в разделе "Использование пакета приложений".
0x80080205 APPX_E_INVALID_BLOCKMAP Пакет приложения был изменен или имеет недопустимую карту блоков. Пакет поврежден. Необходимо создать и подписать пакет еще раз. Дополнительные сведения см. в разделе "Использование пакета приложений".
0x800B0004 TRUST_E_SUBJECT_NOT_TRUSTED Пакет приложения был изменен. Содержимое пакета больше не соответствует цифровой подписи. Необходимо снова подписать пакет. Дополнительные сведения см. в разделе "Как подписать пакет приложения с помощью SignTool".
0x800B0100 TRUST_E_NOSIGNATURE Пакет приложения не назначен. Можно развернуть только подписанные пакеты приложений Windows. Сведения о подписании пакета приложения см. в разделе "Как подписать пакет приложения с помощью SignTool".
0x800B0109 CERT_E_UNTRUSTED_ROOT Цепочка сертификатов, используемая для подписывания пакета приложения, заканчивается корневым сертификатом, который не является доверенным. Перейдите к шагу 2, чтобы устранить неполадки доверия с сертификатом.
0x800B010A CERT_E_CHAINING Цепочка сертификатов не может быть создана для доверенного корневого центра из сертификата, который использовался для подписи пакета приложения. Перейдите к шагу 2, чтобы устранить неполадки доверия с сертификатом.

 

Шаг 2. Определение цепочки сертификатов, используемой для подписи пакета приложения

Чтобы выяснить сертификаты, которым должен доверять локальный компьютер, можно проверить цепочку сертификатов для цифровой подписи в пакете приложения.

Определение цепочки сертификатов

  1. В проводник щелкните правой кнопкой мыши пакет приложения и выберите "Свойства".
  2. В диалоговом окне "Свойства" выберите вкладку "Цифровые подписи", которая также показывает, можно ли проверить подпись.
  3. В списке подписей выберите подпись и нажмите кнопку "Сведения ".
  4. В диалоговом окне "Сведения о цифровой подписи" нажмите кнопку "Вид сертификата".
  5. В диалоговом окне "Сертификат" выберите вкладку "Путь сертификации".

Верхний сертификат в цепочке — корневой сертификат, а нижний — сертификат подписи. Если только один сертификат находится в цепочке, сертификат подписи также является собственным корневым сертификатом. Вы можете определить серийный номер для каждого сертификата, который затем используется с Certutil:

Определение серийного номера для каждого сертификата

  1. В области пути сертификации выберите сертификат и нажмите кнопку "Просмотреть сертификат".
  2. В диалоговом окне "Сертификат" выберите вкладку "Сведения" , в которой отображается серийный номер и другие полезные свойства сертификата.

Шаг 3. Определение сертификатов, доверенных локальным компьютером

Чтобы развернуть пакет приложения, он должен быть не только доверенным в контексте пользователя, но и в контексте локального компьютера. В результате цифровая подпись может отображаться допустимой при просмотре на вкладке "Цифровые подписи" на предыдущем шаге, но при развертывании пакета приложения по-прежнему завершается ошибкой.

Определение того, является ли цепочка сертификатов, используемая для подписи пакета приложения, в частности доверенным локальным компьютером

  1. Выполните следующую команду:

    CertUtil.exe -store Root rootCertSerialNumber
    
  2. Выполните следующую команду:

    CertUtil.exe -store TrustedPeople signingCertSerialNumber
    

Если серийный номер сертификата не указан, Certutil выводит список всех сертификатов, доверенных локальным компьютером для этого хранилища.

Пакет может завершиться ошибкой установки из-за ошибок цепочки сертификатов, даже если сертификат подписи не является самозаверяющим, а корневой сертификат находится в корневом хранилище локального компьютера. В этом случае может возникнуть проблема с доверием для промежуточных центров сертификации. Дополнительные сведения об этой проблеме см. в статье "Работа с сертификатами".

Замечания

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

Если вы хотите вручную доверять приложению для установки (например, установить собственный пакет приложения, подписанный тестом), вы можете вручную добавить сертификат в доверие к сертификату локального компьютера из пакета приложения.

Добавление сертификата вручную в доверие к сертификату локального компьютера

  1. В проводник щелкните правой кнопкой мыши пакет приложения и в всплывающем контекстном меню выберите "Свойства".
  2. В диалоговом окне "Свойства" выберите вкладку "Цифровые подписи".
  3. В списке подписей выберите подпись и нажмите кнопку "Сведения ".
  4. В диалоговом окне "Сведения о цифровой подписи" нажмите кнопку "Вид сертификата".
  5. В диалоговом окне "Сертификат" нажмите кнопку "Установить сертификат...
  6. В мастере импорта сертификатов выберите локальный компьютер и нажмите кнопку "Далее". Вам потребуется предоставить права администратора для продолжения.
  7. Выберите "Разместить все сертификаты" в следующем хранилище и перейдите в надежное хранилище Люди.
  8. Нажмите кнопку "Далее", а затем нажмите кнопку "Готово", чтобы завершить работу мастера.

После этого добавления вручную вы увидите, что сертификат теперь является доверенным в диалоговом окне "Сертификат ".

Сертификат можно удалить после того, как он больше не нужен.

Удаление сертификата

  1. Запустите Cmd.exe от имени администратора.

  2. В командной строке администратора выполните следующую команду:

    Certutil -store TrustedPeople
    
  3. Найдите серийный номер установленного сертификата. Это число является идентификатором сертификата.

  4. Выполните следующую команду:

    Certutil -delStore TrustedPeople certID
    

Рекомендуется избегать ручного добавления корневых сертификатов в хранилище сертификатов доверенных корневых центров сертификации локального компьютера. Наличие нескольких приложений, подписанных с помощью сертификатов, цепочки с тем же корневым сертификатом, например бизнес-приложениями, может быть более эффективным, чем установка отдельных сертификатов в хранилище доверенных Люди. Доверенное хранилище Люди содержит сертификаты, которые считаются доверенными по умолчанию, поэтому не проверяются более высокими центрами или списками доверия сертификатов или цепочками. Рекомендации по добавлению сертификатов в хранилище сертификатов доверенных корневых центров сертификации см. в рекомендациях по подписи кода.

Соображения безопасности

Добавив сертификат в хранилища сертификатов локального компьютера, вы влияете на доверие сертификатов всех пользователей на компьютере. Рекомендуется установить все сертификаты подписывания кода, которые требуется протестировать пакеты приложений в надежном хранилище сертификатов Люди. Немедленно удалите эти сертификаты, если они больше не нужны, чтобы предотвратить их использование для компрометации доверия системы. Если вы создаете собственные тестовые сертификаты для подписывания пакетов приложений, мы также рекомендуем ограничить привилегии, связанные с тестируемым сертификатом. Сведения о создании тестовых сертификатов для подписывания пакетов приложений см. в статье "Создание сертификата подписи пакета приложения".

Примеры

Создание примера пакета приложения

Основные понятия

Устранение неполадок с упаковкой, развертыванием и запросом приложений Windows

Задачи Certutil для управления сертификатами