Crie um certificado de assinatura de código no Windows para assinar scripts do PowerShell

4

De acordo com este guia , tentei criar um certificado para assinando scripts do 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

O seguinte erro ocorre:

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=.

Eu usei OpenSSL v1.1.0c . Todos os outros guias que encontrei criam certificados que não são utilizáveis para assinatura de código.

    
por Antineutrino 06.01.2017 / 08:32

1 resposta

12

Não há necessidade no OpenSSL no Windows. No Windows 7, você pode usar meu próprio script do PowerShell que publiquei na Galeria de scripts do TechNet: certificado auto-assinado gerador (PowerShell) . O uso pode ser algo assim:

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

(primeiro exemplo).

A partir do Windows 8, você pode usar a ferramenta certreq.exe incorporada para gerar o certificado. Crie o arquivo INF com a configuração cert, por exemplo:

[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

e, em seguida, execute o seguinte comando:

Certreq –new path\inffilename.inf

Isso gerará e instalará o certificado no armazenamento de certificados do usuário atual.

A partir do Windows 10, você pode usar o cmdlet do PowerShell integrado da seguinte forma:

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

No entanto, o uso de certificado autoassinado para assinatura de código em ambientes de produção é dessolvido. Você deve usá-los somente em ambientes de teste.

Para uso privado (somente na organização), você deve verificar se a empresa já possui infra-estrutura PKI e entrar em contato com o pessoal apropriado para receber o certificado de assinatura de código aprovado pela empresa.

Para scripts públicos (você vai distribuir junto com pacotes de software ou distribuir scripts para seus clientes), sugiro comprar a assinatura de código do provedor de CA comercialmente confiável do mundo.

    
por 06.01.2017 / 13:12