2012-02-13 22 views
5

Questo è un seguito a Mono xbuild error CS1548 - key file has incorrect formatPFX/PKCS12 alla conversione SNK per mono

Ciao, ho una domanda che è scritto in C# utilizzando VS2008. Al momento stiamo trasferendo questa app su Mac usando Mono.

Ho provato a estrarre la chiave dal file pfx. Prima ho usato

`sn -pc key.pfx key.snk` 

questo mi ha dato un errore di

'Failed to extract public key for key pair -- Keyset does not exist'. 

Ho quindi utilizzato

`sn -p key.pfx key.snk` 

questo ha creato il file SNK che volevo. Ho poi in mono selezionata l'opzione di progetto> Assemblea firma Quando costruito l'errore

'key.snk is missing private key needed for signing'. 

credo di aver capito che se io faccio una nuova chiave SNK che posso avere le chiavi pubbliche e private in esso. Solo a causa di problemi Legacy ci piacerebbe davvero essere in grado di utilizzare i valori della chiave pfx originale.

risposta

6

Grazie mille Poupou per avere la risposta Ho appena aggiunto il codice al piccolo programma che ho fatto per ottenere il mio snk.

using System.IO; 
using System.Security.Cryptography; 
using System.Security.Cryptography.X509Certificates; 

namespace PfxSnk 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      X509Certificate2 cert = new X509Certificate2(@"KEY.pfx", "pfxPassword", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); 
      RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey; 

      byte[] array = provider.ExportCspBlob(!provider.PublicOnly); 

      using (FileStream fs = new FileStream("FileName.snk", FileMode.Create, FileAccess.Write)) 
      { 
       fs.Write(array, 0, array.Length); 
      } 
     } 
    } 
} 
0

Prova sn -p key.pfx key.snk invece.

+1

Dalla domanda questo sembra identico alla seconda cosa che ha provato. – poupou

2

sn -p viene utilizzato per estrarre un public key da un nome sicuro.

Tuttavia, per firmare un assembly è necessaria la chiave privata, quindi questa conversione (integrata sn) non è utile per il proprio obiettivo.

Purtroppo una rapida occhiata alle opzioni Microsoft sn non documenta alcuna opzione per fare ciò che stai cercando.

Il mio suggerimento è di scrivere un piccolo strumento, riutilizzando il codice sorgente Mono sn e Mono.Security.dll, per leggere il file PFX (pkcs # 12) e scriverlo come file SNK.

+0

Grazie poupou Sono un po 'un principiante con la firma di assiemi ecc. Capisco cosa dovrebbe fare lo strumento, ma non ho idea di come iniziare a realizzarlo. Così posso usare mono.security per leggere in pfx e quindi ottenere le chiavi private e pubbliche e quindi creare il nuovo file snk con mono sn e le chiavi recuperate. Ho la password del file pfx. Grazie in anticipo per eventuali suggerimenti lo apprezzo davvero. –

+0

il nostro file pfx ha una password che riteniamo impedisca la lettura dei tasti mono come in questo link https://bugzilla.xamarin.com/show_bug.cgi?id=725. Inoltre non sappiamo come scrivere un file snk con le esatte chiavi private e pubbliche - sembra generare nuove chiavi casuali. –

+0

La classe 'X509Certificate2' può leggere il file protetto da password PFX (PKCS # 12). Ha anche una proprietà 'PrivateKey' che esporrà l'istanza' RSA'. Con questo puoi usare la classe 'StrongName' (da Mono.Security.dll) per salvarla come un file' .snk' (senza password). – poupou