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);
}
}
}
}