mono strongname pfx pkcs#12 snk

Conversión de PFX/PKCS12 a SNK para mono



cer to pfx (3)

Pruebe sn -p key.pfx key.snk en sn -p key.pfx key.snk lugar.

Este es el seguimiento del error de Mono xbuild CS1548: el archivo de la clave tiene un formato incorrecto

Hola, tengo una aplicación escrita en C # usando VS2008. En este momento estamos portando esta aplicación a Mac usando Mono.

Intenté extraer la clave del archivo pfx. Primero usé

`sn -pc key.pfx key.snk`

esto me dio un error de

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

Entonces utilicé

`sn -p key.pfx key.snk`

esto creó el archivo snk que yo quería. Luego, en mono, seleccioné el proyecto Opción> Firma de ensamblaje Cuando se generó el error

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

Creo que entiendo que si hago una nueva clave snk puedo tener claves privadas y públicas. Es solo que, debido a problemas con el Legado, realmente nos gustaría poder usar los valores clave pfx originales.


sn -p se usa para extraer una clave pública de un nombre fuerte.

Sin embargo, necesita la clave privada para firmar un ensamblado, por lo que esta conversión ( sn incorporada) no es útil para su objetivo.

Lamentablemente, un vistazo rápido a las opciones de Microsoft sn no documenta ninguna opción para hacer lo que estás buscando.

Mi sugerencia es escribir una pequeña herramienta, volver a utilizar el código fuente Mono sn y Mono.Security.dll , leer el archivo PFX (pkcs # 12) y escribirlo como un archivo SNK.


Muchas gracias a Poupou por darme la respuesta. Acabo de agregar el código al pequeño programa que hice para obtener mi 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); } } } }