demande de rappel immédiat

"Visual Studio 2008", "Signature", "Objet non trouvé"

Posted by Jean-Paul Blanc Monday, April 05, 2010 4:04:40 PM
Rate this Content 0 Votes

 

 

En tant que développeur je ne peux guère me passer de certificats. J’en retrouve dans la signature de code dans la création de noms forts, dans les mécanismes d’échange sécurisés. Bref, j’ai demandé à mon Boss de m’acheter un certificat "officiel" auprès d’une autorité de certification.

 

1) Le contexte.

Comme mon boss est généreux, j’ai reçu une paire de clef par retour du courrier. Eh oui, ce sont des choses qui ce font. Un fichier .PVK contient la clef publique, et un fichier .SPC (ou .CER) pour la clef publique. En ce qui me concerne je suis plus à l’aise avec les fichiers .PFX qui embarquent les deux parties du certificat. Puis tant qu’à faire, j'entreposer mon certificat dans le magasin de certificats utilisateur. Je ne suis pas le seul à vouloir fabriquer un fichier .PFX à partir du couple .PVK, .SPC ; Microsoft fournit pour cela le programme PVK2PFX.EXE dans les outils des SDKs.

pvk2pfx.exe -pvk silogixCodeSigning.pvk -pi <mot-de-passe-PVK> -spc silogixCodeSigning.spc -pfx test.pfx -po < mot-de-passe-PFX > -f

Utilisation:
    pvk2pfx -pvk <pvk-file> [-pi <pvk-pswd>] -spc <spc-file>
           [-pfx <pfx-file> [-po <pfx-pswd>] [-f]]

        -pvk <pvk-file>  - Entrée nom du fichier PVK.
        -spc <spc-file>  - Entrée nom du fichier SPC ou CER.
        -pfx <pfx-file>  - Sortie nom du fichier PFX.
        -pi <pvk-pswd>   - Mot de passe du fichier PVK.
        -po <pfx-pswd>   - Mot de passe du fichier PFX,
                           le même que -pi su vide.
        -f               - force la réécriture d'un fichier PFX
                           existant.

        Si l'option -pfx n'est pas renseignée, un assistant d'exportation apparait.
Dans ce cas les option -po et -f sont ignorées.

 

Résultat impeccable, le fichier PFX rentre bien dans mon magasin de certificat, depuis lequel je l’utilise pour signer mes Scripts Powershell :

PS C:\silogix> $cert = Get-ChildItem cert:\CurrentUser\my -CodeSigningCert
PS C:\silogix> Set-AuthenticodeSignature .\services.ps1 -Cert $cert

Je peux l’utiliser tel quel pour signer mes fichiers exécutables :

signtool.exe sign /f MonCertificat.pfx /p <mot-de-passe>  /v "Fichier-à-signer"

Mais au moment où je tente de l’utiliser pour créer mes noms forts sous Visual Studio 2008 patatras !

Erreur "Objet existe déjà" dans Visual Studio 2008

Il semble que le certificat ne dispose pas des attributs nécessaires pour fabriquer un nom fort. Ou que Visual Studio vérifie un attribut particulier. Autre supposition, je ne suis que simple utilisateur de mon système (je ne suis pas administrateurà) et il y "un objet" qui existe déjà et que je n’ai pas le droit d’écraser.

2) Les solutions du net.

J’ai trouvé, à partir de Google, quatre modes opératoires qui semblent avoir porté leurs fruits pour les utilisateurs qui les on publiés.

  1. Retoucher le certificat avec des outils OpenSSL de sorte à y insérer l’attribut manquant (ou mal spécifié).
  2. Simplement exporter mon certificat depuis le magasin, au lieu d’utiliser directement celui généré par PVK2PFX.EXE.
  3. Changer le mot de passe du certificat directement avec le bouton prévu à cet effet dans la boîte de dialogue de signature de Visual Studio 2008.
  4. Enfin donner le droit en écriture sur le chemin de stockage des certificats machine (pourquoi le chemin des certificats machine ?)
    C:\Documents and Settings\All Users\Application data\Microsoft\Crypto\RSA\MachineKeys
    ce qui ce traduit physiquement sur un poste Windows Seven par le dossier  :
    C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

3) Ce qui fonctionne pour moi.

 Pris individuellement aucun de ces modes opératoires n'a corrigé mon problème. Je passe sur les essais infructueux. Voici ce qui a fonctionné pour moi.

  1. J’ai tout dabord transformé mon certitificat avec les outils openSSL comme suit :

    REM Pour éviter d'écraser le fichier PFX courant on l’exporte
    openssl.exe pkcs12 -in silogixCodeSigning.pfx -out silogixCodeSigningForVSViaOpenSSL.key
    Enter Import Password:<mot-de-passe-PFX>
    MAC verified OK
    Enter PEM pass phrase: <mot-de-passe-fichier-intermédiaire>
    Verifying - Enter PEM pass phrase:

    REM Exporte un nouveau fichier PFX avec l’attribut de clef de signature
    openssl pkcs12 -export -out silogixCodeSigningForVSViaOpenSSL.pfx -keysig -in silogixCodeSigningForVSViaOpenSSL.key
    Loading 'screen' into random state - done
    Enter pass phrase for silogixCodeSigningForVSViaOpenSSL.key: <mot-de-passe-fichier-intermédiaire>
    Enter Export Password: <mot-de-passe-du-nouveau-PFX>
    Verifying - Enter Export Password:
    Lorsque j’ai tenté d’utiliser ce certificat, j’ai eu droit à une erreur différente, mais tout aussi incompréhensible.

    Une autre erreur de signature de nom fort.
  2. Pensant que la modification OpenSSL avait peut-être corrompu le certificat, j’ai tenté de le charger dans le magasin Windows. Pas de soucis, il a bien été lu.

    Je l’ai alors exporté, avec sa clef privée, sans toucher au format d’exportation par défaut du certificat et j’ai obtenu un nouveau fichier PFX "silogixCodeSigningForVSViaOpenSSLExportMag.pfx".

    Export de certificat

Avec ce nouveau certificat, je peux signer mes exécutables, mes scripts Powershell, et créer des noms forts sous Visual Studio 2008. Je ne comprends pas réellement le pourquoi du comment de ces deux transformations, mais le fait est que ça fonctionne.

Comments are closed on this post.