Signtool me permet de signer du code mais AuthenticodeSignature dit le “certificat n'est pas adapté pour la signature de code”
J'ai un auto-signé certificat de signature de code (avec les directions à partir de cette réponse) et il fonctionne très bien quand j'utilise signtool.exe
. Mais si j'essaie de le signer à l'aide de Powershell, il échoue.
Signature avec signtool
C:\>signtool sign /v /n "VetWeb" SetupRDPPermissions.ps1
The following certificate was selected:
Issued to: VetWeb
Issued by: VetWeb CA
Expires: Sat Dec 31 18:59:59 2039
SHA1 hash: 84136EBF8D2603C2CD6668C955F920C6C6482EE4
Done Adding Additional Store
Successfully signed: SetupRDPPermissions.ps1
Number of files successfully Signed: 1
Number of warnings: 0
Signature en Powershell
PS C:\> $cert = @(Get-Childitem cert:\CurrentUser\My | Where-Object -FilterScript {$_.Subject -eq 'CN=VetWeb'})[0]
PS C:\> Set-AuthenticodeSignature SetupRDPPermissions.ps1 $cert
Set-AuthenticodeSignature : Cannot sign code. The specified certificate is not suitable for code signing.
At line:1 char:26
+ Set-AuthenticodeSignature <<<< SetupRDPPermissions.ps1 $cert
+ CategoryInfo : InvalidArgument: (:) [Set-AuthenticodeSignature], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetAuthenticodeSignatureCommand
PS C:\> $cert | format-list *
PSPath : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\84136EBF8D2603C2CD6668C955F920C6C6482EE4
PSParentPath : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName : 84136EBF8D2603C2CD6668C955F920C6C6482EE4
PSDrive : cert
PSProvider : Microsoft.PowerShell.Security\Certificate
PSIsContainer : False
Archived : False
Extensions : {System.Security.Cryptography.Oid}
FriendlyName :
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter : 12/31/2039 5:59:59 PM
NotBefore : 6/1/2012 1:49:31 PM
HasPrivateKey : True
PrivateKey : System.Security.Cryptography.RSACryptoServiceProvider
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 1, 235...}
SerialNumber : CF330347F35AC0B4427AFFA82DB51238
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint : 84136EBF8D2603C2CD6668C955F920C6C6482EE4
Version : 3
Handle : 479608336
Issuer : CN=VetWeb CA
Subject : CN=VetWeb
Pourquoi puis-je m'inscrire à l'aide de signtool.exe mais pas de Powershell?
P. S. de course Get-Childitem cert:\CurrentUser\My -CodeSigningCert
ne retourne pas de résultat.
OriginalL'auteur Scott Chamberlain | 2012-06-07
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et la réponse que j'ai compris, c'est que j'ai eu à la création de deux certificats. Tout d'abord, un certificat racine de confiance de l'autorité à l'aide de
Et puis un certificat personnel à partir du dessus de l'autorité de certificat à l'aide de
Une fois créé, l'utilisation
pour la signature (en supposant que vous avez un seul codesigning certificat). Par exemple, si le nom du script est xyz.ps1, utilisez cette commande PowerShell
OriginalL'auteur Arpit Chauhan
Selon get-help certificat
-CodeSigningCert
paramètre dynamique du certificat de fournisseur obtient seulement ceux des certificats de signature de code de l'autorité.Maintenant pourquoi
signtool
peut signer et de ne pasSet-AuthenticodeSignature
, l'explication est peut-être dans Introduction à la Signature de Code document de Microsoft.Voici ma version de la génération de l'autorité de Certification :
Voici ma version de la génération de dev certificat :
eku
maisSet-AuthenticodeSignature
doit être la eku1.3.6.1.5.5.7.3.3
appliquée.OriginalL'auteur JPBlanc
La question est la signature cert est mal fait et pas rater le KUs & EKUs. Personnellement, je recommande utilisant OpenSSL, par l'intermédiaire d'une openssl.cnf, de générer des certificats.
openssl
via une openssl.cnf, puis la création de l'ICA pour la Signature de Code (signé par l'auto-signé de CA), qui est ensuite utilisé pour signer le certificat de signature de code.C:\Program Files\OpenVPN\bin
OpenSSL KUs & EKUs
Les certificats de signature de Code doit avoir le jeu suivant:
keyUsage = critical, nonRepudiation, digitalSignature
nonRepudiation
digitalSignature
extendedKeyUsage = critical, codeSigning, msCodeInd, msCodeCom, mcCTLSign, timeStamping
codeSigning
msCodeInd
msCodeCom
mcCTLSign
timeStamping
Signe Outil
PreReqs:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
\10\bin\10.0.15063.0\x64
reflète le bon chemin pour votre PCCommandes:
%TS%
variable pour la commande ci-dessoussign
/s
<name>
/fd
/ph
/td
<alg>
/tr
ou /tseal commutateur de demander un résumé de l'algorithme utilisé par le RFC 3161 serveur d'horodatage.*/tr
<URL>
/t
) n'est pas spécifié, le fichier signé ne sera pas datées. Un avertissement est généré si l'horodatage échoue. Ce commutateur ne peut pas être utilisé avec le/t
commutateur.PowerShell
$Cert
variable pour la commande ci-dessous$TS
variable pour la commande ci-dessousSet-AuthenticodeSignature
-HashAlgorithm
-IncludeChain
<String>
NotRoot
est la valeur par défaut. Les valeurs acceptées pour ce paramètre sont:Signer
: Ne comprend que le signataire du certificat.NotRoot
: Comprend tous les certificats de la chaîne de certificat, à l'exception de l'autorité racine.All
: Comprend tous les certificats de la chaîne de certificats.-Certificate
<X509Certificate>
Get-PfxCertificate
ou utiliser leGet-ChildItem
applet de commande dans le Certificat (Cert:) en voiture. Si le certificat n'est pas valide ou n'a pas de signature de code de l'autorité, la commande échoue.Pour signer un fichier exécutable, on a besoin d'un SSL ou GPG signature cert. Vous avez manqué le point que je faisais... toute personne qui exécute un serveur dans leur maison a besoin de SSL cert pour le serveur, si c'est un serveur web pour une page d'administration du routeur ou un serveur VPN, et de ce fait, il est beaucoup plus sûr d'avoir de la centrale CA signer un ACI qui sera uniquement question de signature de code cert(s), puis utiliser l'ICA à signer la RSE. Il n'est pas sécurisé, et totalement contre-productive, pour générer une auto-signé de signature de code cert, comme il n'y a pas de chaîne de confiance, qui va créer des problèmes en bas de la route.
OriginalL'auteur JW0914