簡體   English   中英

單聲道的PFX / PKCS12到SNK轉換

[英]PFX/PKCS12 to SNK conversion for mono

這是對Mono xbuild錯誤CS1548的跟進 - 密鑰文件格式不正確

嗨,我有一個使用VS2008用C#編寫的應用程序。 目前我們正在使用Mono將此應用程序移植到Mac。

我試圖從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文件。 然后我在單聲道選擇了項目選項>程序集簽名時構建錯誤

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

我想我明白,如果我創建一個新的snk密鑰,我可以在其中包含私鑰和公鑰。 只是因為遺留問題,我們真的希望能夠使用原始的pfx密鑰值。

非常感謝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 snMono.Security.dll源代碼,讀取PFX(pkcs#12)文件並將其作為SNK文件寫回。

請嘗試使用sn -p key.pfx key.snk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM