【问题标题】:PFX/PKCS12 to SNK conversion for mono单声道的 PFX/PKCS12 到 SNK 转换
【发布时间】:2012-03-04 13:30:30
【问题描述】:

这是对Mono xbuild error CS1548 - key file has incorrect format的跟进

您好,我有一个使用 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 文件。 然后我在单声道中选择了项目 Option > Assembly Signing 构建时出现错误

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

我想我明白,如果我制作一个新的 snk 密钥,我可以在其中同时拥有私钥和公钥。只是因为遗留问题,我们真的希望能够使用原始 pfx 键值。

【问题讨论】:

    标签: mono strongname pfx pkcs#12 snk


    【解决方案1】:

    非常感谢 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】:

      sn -p用于从强名称中提取public key。

      但是,您需要私钥才能签署程序集 - 所以这种(内置 sn)转换对您的目标没有帮助。

      遗憾的是,快速浏览一下 Microsoft sn options 并没有记录任何选项来执行您正在寻找的操作。

      我的建议是写一个小工具,重新使用 Mono sn 和 Mono.Security.dll 源代码,读取 PFX (pkcs#12) 文件并将其作为 SNK 文件写回。

      【讨论】:

      • 谢谢 poupou 我有点像签署程序集等方面的初学者。我了解该工具应该做什么只是不知道如何开始制作它。那么我可以使用 mono.security 读取 pfx,然后获取私钥和​​公钥,然后使用 mono sn 和检索到的密钥创建新的 snk 文件。我有 pfx 文件的密码。提前感谢您提出的任何建议,我非常感谢。
      • 我们的 pfx 文件上有一个密码,我们认为这会阻止单声道读取密钥,如链接 bugzilla.xamarin.com/show_bug.cgi?id=725 中所示。此外,我们不知道如何使用确切的私钥和公钥编写 snk 文件 - 它似乎会生成新的随机密钥。
      • X509Certificate2 类可以读取 PFX (PKCS#12) 密码保护文件。它还有一个PrivateKey 属性,它将公开RSA 实例。有了这个,您可以使用 StrongName 类(来自 Mono.Security.dll)将其保存为(无密码).snk 文件。
      • 感谢 poupou,我会试一试并发布我的结果。
      【解决方案3】:

      改用sn -p key.pfx key.snk。

      【讨论】:

      • 从问题来看,这看起来与他尝试的第二件事相同。
      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 2020-04-11
      • 1970-01-01
      • 2012-06-05
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多