Преобразование PFX / PKCS12 в SNK для моно - PullRequest
6 голосов
/ 13 февраля 2012

Это продолжение Mono xbuild error 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> Сборка подписи Когда построена ошибка

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

Мне кажется, я понимаю, что если я сделаю новый ключ snk, у меня могут быть как закрытые, так и открытые ключи. Просто из-за проблем Legacy нам бы очень хотелось иметь возможность использовать исходные значения ключей pfx.

Ответы [ 3 ]

7 голосов
/ 01 марта 2012

Большое спасибо 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);
            }
        }
    }
}
2 голосов
/ 19 февраля 2012

sn -p используется для извлечения открытого ключа из строгого имени.

Однако вам нужен закрытый ключ для подписи сборки - так что это (встроенное sn) преобразование не поможет вашей цели.

К сожалению, быстрый взгляд на опции Microsoft sn не документирует никакой возможности сделать то, что вы ищете.

Я предлагаю написать небольшой инструмент, повторно используя Mono sn и Mono.Security.dll исходный код, чтобы прочитать файл PFX (pkcs # 12) и записать его обратно как файл SNK.

0 голосов
/ 15 февраля 2012

Попробуйте sn -p key.pfx key.snk вместо.

...