Преобразование PFX/PKCS12 в SNK для моно
Это продолжение ошибки Mono xbuild CS1548 - файл ключа имеет неверный формат
Привет, у меня есть приложение, которое написано на C# с использованием VS2008. В настоящее время мы переносим это приложение на Mac с помощью Mono.
Я попытался извлечь ключ из файла pfx. Сначала я использовал
`sn -pc key.pfx key.snk`
это дало мне ошибку
'Failed to extract public key for key pair -- Keyset does not exist'.
Я тогда использовал
`sn -p key.pfx key.snk`
это создало файл snk, который я хотел. Я тогда в моно выбрал проект Option > Assembly Signing Когда построили ошибку
'key.snk is missing private key needed for signing'.
Я думаю, что понимаю, что если я сделаю новый ключ snk, у меня могут быть как закрытые, так и открытые ключи. Просто из-за проблем Legacy нам бы очень хотелось иметь возможность использовать исходные значения ключей pfx.
3 ответа
Большое спасибо Poupou за то, что пришли с ответом. Я только что добавил код в небольшую программу, которую я сделал, чтобы получить мой 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);
}
}
}
}
sn -p
используется для извлечения открытого ключа из строгого имени.
Однако вам нужен закрытый ключ для подписи сборки - так вот (встроенный sn
) преобразование не помогает вашей цели.
К сожалению, быстрый взгляд на Microsoft sn
Параметры не документируют любую возможность сделать то, что вы ищете.
Мое предложение состоит в том, чтобы написать небольшой инструмент, повторно используя Mono sn
а также Mono.Security.dll
исходный код, чтобы прочитать файл PFX (pkcs#12) и записать его обратно как файл SNK.