2012-02-13 9 views
5

to śledzić na Mono xbuild error CS1548 - key file has incorrect formatPFX/PKCS12 do nawrócenia SNK dla mono

Hi, Mam aplikacji, która jest napisany w języku C# za pomocą VS2008. Obecnie przenosimy tę aplikację na komputer Mac przy użyciu Mono.

Próbowałem wyodrębnić klucz z pliku pfx. Najpierw użyłem

`sn -pc key.pfx key.snk` 

ten dał mi błąd

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

I następnie wykorzystywane

`sn -p key.pfx key.snk` 

ten utworzony plik SNK, które chciałem. I wtedy w mono wybrano opcję Projekt> Assembly Podpisanie Kiedy zbudowano Błąd

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

Chyba rozumiem, że jeśli zrobię nowy klucz SNK, że mogę mieć klucze zarówno prywatne jak i publiczne w nim. Po prostu dlatego, że ze względu na problemy ze starszymi wersjami chcielibyśmy móc używać oryginalnych wartości klucza pfx.

Odpowiedz

6

Wielkie dzięki Poupou za udzielenie odpowiedzi Właśnie dodałem kod do małego programu, który zrobiłem, aby uzyskać moje 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

Zamiast tego spróbuj .

+1

Z pytania to wygląda identycznie jak druga rzecz, której próbował. – poupou

2

sn -p służy do wyodrębniania z gry wideo nazwy public key.

Jednak potrzebny jest klucz prywatny w celu podpisania zespołu - dlatego ta (wbudowana konwersja sn) nie jest pomocna w osiągnięciu celu.

Niestety, szybkie przejrzenie opcji Microsoft sn nie dokumentuje żadnej opcji, aby zrobić to, czego szukasz.

Moja sugestia to napisanie małego narzędzia, ponowne użycie kodu źródłowego Mono sn i Mono.Security.dll, aby odczytać plik PFX (pkcs # 12) i zapisać go ponownie jako plik SNK.

+0

Dziękuję poupou Jestem trochę początkującym z podpisywaniem złożeń itp. Rozumiem, co to narzędzie powinno robić, po prostu nie mam pojęcia, jak zacząć to robić. Więc mogę użyć mono.security do odczytu w pfx, a następnie uzyskać klucze prywatne i publiczne, a następnie utworzyć nowy snk z mono sn i pobranych kluczy. Mam hasło pliku pfx. Z góry dziękuję za wszelkie sugestie, które naprawdę doceniam. –

+0

nasz plik pfx ma hasło, które naszym zdaniem uniemożliwi monofoniczne czytanie kluczy, jak w tym linku https://bugzilla.xamarin.com/show_bug.cgi?id=725. Również nie wiemy, jak napisać snk z dokładnymi kluczami prywatnymi i publicznymi - wydaje się generować nowe klucze losowe. –

+0

Klasa 'X509Certificate2' może odczytać plik chroniony hasłem PFX (PKCS # 12). Ma również właściwość 'PrivateKey', która ujawni instancję' RSA'. Dzięki temu możesz użyć klasy 'StrongName' (z Mono.Security.dll), aby zapisać ją jako (bez hasła) plik' .snk'. – poupou