首页 文章

使用pfx签署C#代码

提问于
浏览
3

我觉得这应该不是那么难,但我会疯狂地试图让它发挥作用 . 我发现了许多不同的东西要尝试,似乎没有什么工作 .

我试图使用.pfx文件签署WPF程序集 . 如果我尝试使用原始文件,我会收到“找不到用于解密的证书和私钥” .

如果我导入密钥并再次导出它,取消选择“如果可能的话,在证书路径中包括所有证书”,它似乎可以正常工作 . 当我去构建时,我得到“错误1无法导入以下密钥文件:my_key.pfx . 密钥文件可能受密码保护 . 要更正此问题,请尝试再次导入证书或手动将证书安装到强名称CSP使用以下密钥容器名称:“

我可以将ClickOnce清单标记为正常,而不是汇编 . 有关如何使这项工作的任何建议?

1 回答

  • 6

    我遇到过类似的问题,经过多年的C#开发(VS 2005到2012),从未设法找到一种方法,使用证书颁发机构的.pfx文件来编写项目属性的代码 . 代码签名有程序集属性和项目设置,所有这些都会相互干扰,而且都不起作用 . 项目属性表格要求输入pfx的密码(似乎没有存储在任何地方)然后签名失败,因为密码被破坏了 . 我怀疑MS上的任何人都没有实际使用此代码签名功能和购买的证书,只有VS在本地创建的自签名证书 .

    如果要混淆代码,则还必须在混淆后对其进行签名,因此即使它们有效,也无法使用这些方法 .

    我发现唯一可靠的解决方案是使用signtool.exe作为构建后步骤 . 一旦你做好了准备,你可能不再关心是否有更好的方法 .

    当您购买证书时,它通常会直接安装到您的PC证书存储区中,因此您可以在构建后的步骤中直接从商店对其进行代码签名,如下所示:

    "C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign
        /n CertificateName
        /tr http://timestamp.comodoca.com/rfc3161
        "$(TargetPath)"
    

    笔记:

    • 您可能需要搜索以找到您的PC上signtool.exe的位置,并使用您可以找到的最新SDK版本中的版本来获取它的最新版本 - 您必须在帖子中使用完整路径-build命令让它工作

    • "CertificateName"是您在个人证书商店中购买的证书的名称

    • 此处的URL是一个示例(在本例中为Comodo的时间戳服务器),只需将其从您自己的提供商更改为服务器

    或者使用.pfx文件:

    "C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign
        /f CertificateFile.pfx /p Password
        /tr http://timestamp.comodoca.com/rfc3161
        "$(TargetPath)"
    

    (其中CertificateFile.pfx是pfx文件,“Password”是使用该文件的密码 . 要从证书存储中获取pfx文件,请运行“certmgr.msc”并找到证书(可能在Personal \ Certificates中) ,右键单击它并选择所有任务>导出...)

    超级容易 . 为什么互联网上的任何人都没有(例如,出售这些东西的认证机构),首先只是说这个?!

相关问题