Создание сертификата подписи кода в Windows для подписи сценариев PowerShell

Согласно этого руководства Я пытался создать сертификат для подписи сценариев PowerShell:

CD C:\OpenSSL-Win32\bin
REM Create the key for the Certificate Authority.  2048 is the bit encryptiong, you can set it whatever you want
openssl genrsa -out C:\Test\ca.key 2048
openssl req -config C:\OpenSSL-Win32\bin\openssl.cfg -new -x509 -days 1826 -key C:\Test\ca.key -out C:\Test\ca.crt
REM Now I'm creating the private key that will be for the actual code signing cert
openssl genrsa -out C:\Test\codesign.key 2048
openssl req -config C:\OpenSSL-Win32\bin\openssl.cfg -new -key C:\Test\codesign.key -reqexts v3_req -out C:\Test\codesign.csr
openssl x509 -req -days 1826 -in C:\Test\codesign.csr -CA C:\Test\ca.crt -CAkey C:\Test\ca.key -extfile C:\OpenSSL-Win32\bin\cnf\opensslTest.cnf -set_serial 01 -out C:\Test\codesign.crt
openssl pkcs12 -export -out C:\Test\codesign.pfx -inkey C:\Test\codesign.key -in C:\Test\codesign.crt

Произошла следующая ошибка:

C:\OpenSSL-Win32\bin>openssl x509 -req -days 1826 -in C:\Test\codesign.csr -CA C:\Test\ca.crt -CAkey C:\Test\ca.key -extfile C:\OpenSSL-Win32\bin\cnf\openssl.cnf -set_serial 01 -out C:\Test\codesign.crt
Error Loading extension section default
14516:error:22097082:X509 V3 routines:do_ext_nconf:unknown extension name:crypto\x509v3\v3_conf.c:78:
14516:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:crypto\x509v3\v3_conf.c:47:name=HOME, value=.

Я использовал ] OpenSSL v1.1.0c . Все остальные найденные мной руководства создают сертификаты, которые нельзя использовать для подписи кода.

5
задан 6 January 2017 в 09:32
1 ответ

В Windows нет необходимости в OpenSSL. В Windows 7 вы можете использовать мой собственный сценарий PowerShell, который я опубликовал в галерее сценариев TechNet: Генератор самозаверяющих сертификатов (PowerShell) . Использование может быть примерно таким:

New-SelfsignedCertificateEx -Subject "CN=Test Code Signing" `
-EKU "Code Signing" `
-KeySpec "Signature" `
-KeyUsage "DigitalSignature" `
-FriendlyName "Test code signing" `
-NotAfter $([datetime]::now.AddYears(5))

(самый первый пример).

Начиная с Windows 8, вы можете использовать встроенный инструмент certreq.exe для создания сертификата. Создайте файл INF с конфигурацией сертификата, например:

[NewRequest]
Subject = "CN=Test Code Signing"
KeyLength = 2048
KeyAlgorithm = RSA
ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
MachineKeySet = false
Exportable = true
KeySpec = 2
KeyUsage = 0x80
RequestType = Cert
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.3 ; Code signing

, а затем выполните следующую команду:

Certreq –new path\inffilename.inf

Это сгенерирует и установит сертификат в хранилище сертификатов текущего пользователя.

Начиная с Windows 10, вы можете использовать встроенный Командлет PowerShell выглядит следующим образом:

New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my `
-Subject "CN=Test Code Signing" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
-KeyExportPolicy Exportable `
-KeyUsage DigitalSignature `
-Type CodeSigningCert

Однако использование самозаверяющих сертификатов для подписи кода в производственных средах не рекомендуется. Вы должны использовать их только в тестовых средах.

Для частного использования (только внутри организации) вам следует проверить, владеет ли компания инфраструктурой PKI, и связаться с соответствующим персоналом для получения одобренного компанией сертификата подписи кода.

Для общедоступных скриптов. (вы собираетесь распространять вместе с пакетами программного обеспечения или доставлять сценарии своим клиентам), я бы посоветовал приобрести подпись кода у всемирно надежного коммерческого поставщика CA.

15
ответ дан 3 December 2019 в 00:58

Теги

Похожие вопросы