如何将.snk文件转换为.pfx文件

4
如何将.snk文件(用于为.NET程序集进行强名称签名)转换为适用于同一目的的受密码保护的.pfx文件?
编辑:为了澄清,假设我在VS中创建一个项目,在项目属性中选择Signing,点击“New strong name key file”,并选择不使用密码保护密钥文件:
现在想象一年后我改变主意,想要添加一个密码 - 而不会通过创建新的密钥对来破坏程序集的标识。我该怎么做?

这个回答解决了你的问题吗?如何从PFX / CER创建SNK? - Matt
@Matt - 不完全是这样:那个描述了如何走相反的方向(pfx -> snk),尽管可能有一些线索。 - Joe Albahari
我明白了,我已经取消了关闭投票。 - Matt
1个回答

5
您不需要转换,但可以使用Strong Name Tool (Sn.exe)签署现有的snk文件。(如果snk已经被保护,则需要将部分从证书中拆分出来,这里涉及到一些步骤)。 pfx是在Visual Studio中选择密码保护选项时为您创建的私有证书。您输入的密码用于保护此证书。
这是用于开发还是商业发布?我不建议在开发过程中使用私钥对程序集进行签名。
根据CLR Inside Out Article
虽然将关键文件密码保护比明文存储更好,但仍不是理想的解决方案。您仍需向所有开发人员分发PFX文件,并且他们都必须知道PFX文件的密码。像这样广泛共享的秘密不太可能保密很久。在开发过程中,理想情况下,您不应该必须分发私钥来构建和测试代码。阅读CLR Inside Out(MSDN)文章使用强名称签名。希望对您有所帮助。

1
是的:对密钥文件进行密码保护比明文存储要好得多。因此,我想将我的(非密码保护的)snk转换为(密码保护的)pfx,而不改变公钥并且不失去程序集的身份。我没有多开发人员的问题,因此受密码保护的pfx是理想的选择,比延迟签名更简便。 - Joe Albahari
我认为密码保护仍然不是理想的。但是...... 我相信可以使用Strong Name Tool(Sn.exe)来实现此目的 - 有选项可提取公钥(-p),然后重新组合它们。我以前没有需要做过这样的事情,所以你必须自己弄清楚确切的方法(参数等)。 - Dennis
1
sn.exe有提取公钥的选项,但没有提取私钥的选项。唯一似乎可以提取私钥的选项是-i,它将其复制到CSP中 - 不幸的是,它标记为不可导出。 - Joe Albahari
抱歉,我无法提供更多帮助。可能您唯一的选择是放弃现有的snk文件,并使用新的受密码保护的密钥进行签名。 - Dennis
实际上,您可以从PFX中提取完整的SNK,包括私钥。 - jnm2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接