Я только что проверил ваш код с помощью signtool.exe, полученного из моей установки Visual Studio 2017, и кажется, что все работает.
Так что мне бы очень хотелось увидеть код / команду, которую вы используете для подписи файлов.Еще больше я хотел бы увидеть реальный вывод ошибки, которую вы видите.Не могли бы вы сначала попробовать подписать процесс вручную / вручную, чтобы мы были уверены, что сосредоточены на правильном вопросе?
С учетом сказанного я потратил некоторое время на поиски ответов на некоторые другие ваши вопросы.had.
Решение первой части о том, что вы хотите видеть только
All issuance policies
All application policies
Это решается с помощью параметра TextExtension:
-TextExtension @("2.5.29.37={text}1.3.6.1.4.1.311.10.12.1")
Решение нужной части
Subject Type = CA
Это решается с помощью параметра TextExtension:
-TextExtension @("2.5.29.19={text}CA=1&pathlength=3")
Длина пути используется для ограничения количества уровней дочерних элементов, которые могут использовать сертификат.Пожалуйста, прочитайте больше здесь .Значение 3 - это просто что-то, что используется при тестировании.
Затем нам нужно объединить эти две разные записи TextExtensions:
-TextExtension @("2.5.29.37={text}1.3.6.1.4.1.311.10.12.1", "2.5.29.19={text}CA=1&pathlength=3")
, что заставит нас написать обновленный скрипт, подобный этому
$rootCert = New-SelfSignedCertificate -KeyExportPolicy Exportable -CertStoreLocation cert:\CurrentUser\My -DnsName "Development Root CA" -NotAfter (Get-Date).AddYears(5) -TextExtension @("2.5.29.37={text}1.3.6.1.4.1.311.10.12.1", "2.5.29.19={text}CA=1&pathlength=3") -KeyusageProperty All -KeyUsage CertSign,CRLSign,DigitalSignature
# Export the root authority private key.
[System.Security.SecureString] $password = ConvertTo-SecureString -String "passwordx" -Force -AsPlainText
[String] $rootCertPath = Join-Path -Path cert:\CurrentUser\My\ -ChildPath "$($rootcert.Thumbprint)"
Export-PfxCertificate -Cert $rootCertPath -FilePath "MyCA.pfx" -Password $password
Export-Certificate -Cert $rootCertPath -FilePath "MyCA.crt"
# Create a "MySPC" certificate signed by our root authority.
$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "MySPC" -Signer $rootCert -Type CodeSigningCert
# Save the signed certificate with private key into a PFX file and just the public key into a CRT file.
[String] $certPath = Join-Path -Path cert:\LocalMachine\My\ -ChildPath "$($cert.Thumbprint)"
Export-PfxCertificate -Cert $certPath -FilePath MySPC.pfx -Password $password
Export-Certificate -Cert $certPath -FilePath "MySPC.crt"
# Add MyCA certificate to the Trusted Root Certification Authorities.
$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.import("MyCA.pfx", $password, "Exportable,PersistKeySet")
$store = new-object System.Security.Cryptography.X509Certificates.X509Store(
[System.Security.Cryptography.X509Certificates.StoreName]::Root,
"localmachine"
)
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
# Import certificate.
Import-PfxCertificate -FilePath MySPC.pfx cert:\CurrentUser\My -Password $password
Но, как я уже говорил ранее, ваш код, похоже, генерирует правильные сертификаты, потому что я смог использовать сгенерированный им сертификат и подписать с ним файл .net EXE.
До этогоподпись
Подпись
SignTool sign /n "MySPC" 2LCS.exe
После подписания
Обновление на основе новой информации
Вам необходимо указать ключ / pa в команде проверки,
https://knowledge.digicert.com/solution/SO21771.html
https://docs.microsoft.com/en-us/windows/desktop/seccrypto/signtool
Вопрос: вы бы увидели то же самое с сертификатами makecert?
Обновлено с рабочим кодом
Ваша ориентация на свойствах сертификата вывела меня на неверный путь.Основываясь на обсуждении здесь , я узнал, что нам может нужно создать его как подпись кода класса 3.Я удалил расширение 1.3.6.1.4.1.311.10.12.1 EKU и заменил его на 1.3.6.1.5.5.7.3.3 .Пожалуйста, смотрите пример кода ниже.
$rootCert = New-SelfSignedCertificate -KeyExportPolicy Exportable -CertStoreLocation cert:\CurrentUser\My -DnsName "Development Root CA" -NotAfter (Get-Date).AddYears(5) -TextExtension @("2.5.29.19={text}CA=1&pathlength=3", "2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyusageProperty All -KeyUsage CertSign,CRLSign,DigitalSignature #-Type CodeSigningCert
# Export the root authority private key.
[System.Security.SecureString] $password = ConvertTo-SecureString -String "passwordx" -Force -AsPlainText
[String] $rootCertPath = Join-Path -Path cert:\CurrentUser\My\ -ChildPath "$($rootcert.Thumbprint)"
Export-PfxCertificate -Cert $rootCertPath -FilePath "MyCA.pfx" -Password $password
Export-Certificate -Cert $rootCertPath -FilePath "MyCA.crt"
# Create a "MySPC" certificate signed by our root authority.
$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "MySPC" -Signer $rootCert -Type CodeSigningCert
# Save the signed certificate with private key into a PFX file and just the public key into a CRT file.
[String] $certPath = Join-Path -Path cert:\LocalMachine\My\ -ChildPath "$($cert.Thumbprint)"
Export-PfxCertificate -Cert $certPath -FilePath MySPC.pfx -Password $password
Export-Certificate -Cert $certPath -FilePath "MySPC.crt"
# Add MyCA certificate to the Trusted Root Certification Authorities.
$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.import("MyCA.pfx", $password, "Exportable,PersistKeySet")
$store = new-object System.Security.Cryptography.X509Certificates.X509Store(
[System.Security.Cryptography.X509Certificates.StoreName]::Root,
"localmachine"
)
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
# Import certificate.
Import-PfxCertificate -FilePath MySPC.pfx cert:\CurrentUser\My -Password $password
Я выполнил следующую команду подписи:
И после этого я запустил проверкукоманда:
С этим я считаю, что у вас должен быть рабочий раствор.Пожалуйста, проверьте его, затем подтвердите, а затем расширьте, чтобы включить также вашу подпись с отметкой времени.