Генерация сертификата для подписи приложений Universal Windows Platform (UWP) - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь сгенерировать сертификат, подходящий для подписи приложения Microsoft Universal Windows Platform (UWP). У меня есть один сертификат, который я сам подписал, и один, выданный внутренним центром сертификации моей компании на основе файла CSR (запроса сертификата), который я создал и передал им.

Чтобы создать самоподписанный сертификат, я использовал следующую команду powershell

New-SelfSignedCertificate -Type Custom -Subject "<full certificate DN>" -KeyUsage DigitalSignature -FriendlyName "MyFriendlyName" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

Чтобы создать сертификат, выданный нашим внутренним центром сертификации, я создал CSR с такими же атрибутами:

KeyUsage: Digital Signature
ExtendedKeyUsage: CodeSigning (1.3.6.1.5.5.7.3.3)
2048 bit key
algo: AES-SHA256

С большинством других свойств по умолчанию.

Как я уже говорил, самоподписанный сертификат работает, выданный СА сертификат не будет принят Visual Studio. Вот ошибка, которую я получаю, когда пытаюсь назначить сертификат, выданный ЦС, для подписи:

Конструктор манифеста не смог импортировать сертификат. Выбранный вами сертификат недействителен для подписания, поскольку срок его действия истек или возникла другая проблема. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkID=241478.

Редактировать - Примечание: CA Root и промежуточные сертификаты установлены на машинах в соответствующих хранилищах сертификатов

Вот свойства сертификатов бок о бок. Есть ли какой-нибудь способ узнать, что конкретно не так с сертификатом, которому не удалось получить сертификат? Мне кажется, что я выполнил все требования подписи UWP.

ОБНОВЛЕНИЕ

Вещи становятся незнакомыми. Эти шаги работают:

  1. Щелкните правой кнопкой мыши и "Publi sh" мое приложение UWP из Solution Explorer
  2. Выберите, чтобы не подписывать пакет во время публикации
  3. Подпишите пакет через командную строку с помощью SignTool.exe, используя соответствующий Thumbprint (SHA) для моего сертификата, выданного центром сертификации, он работает!

Вот моя командная строка SignTool:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe" sign /v /fd sha256 /sha1 <my CA-issued cert thumbprint> "path-to-my-unsigned.msix"

Вывод из Signtool с / v (многословно):

The following certificate was selected:
    Issued to: <my org>
    Issued by: <my internal CA name>
    Expires:   Mon Apr 30 11:41:36 2035
    SHA1 hash: <CA-Issued cert hash>

Done Adding Additional Store
Successfully signed: path-to-my-app.msix

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

Итак, вопрос все еще стоит, почему Visual Studio не примет мой выданный CA сертификат как действительный сертификат подписи, даже если я могу использовать его для ручной подписи с помощью SignTool.exe?

END UPDATE

enter image description here

1 Ответ

0 голосов
/ 05 мая 2020

У меня есть этот процесс для UWP - я подозреваю, что Питер прав, и вы сталкиваетесь с проверкой цепочки, которую мы проводим внутри, и по какой-то причине не проходили проверку.

Поскольку наш внутренний процесс связан к обратной связи с VS, я свяжусь с вами там .

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

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