Я пытаюсь сгенерировать сертификат, подходящий для подписи приложения 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.
ОБНОВЛЕНИЕ
Вещи становятся незнакомыми. Эти шаги работают:
- Щелкните правой кнопкой мыши и "Publi sh" мое приложение UWP из Solution Explorer
- Выберите, чтобы не подписывать пакет во время публикации
- Подпишите пакет через командную строку с помощью 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