我有一个具有以下限制的应用程序:

  • 必须通过ClickOnce分发,清单由可信证书签名 .

  • 也必须签署程序集 .

我有一个PFX发给我公司进行代码签名(1.3.6.1.5.5.7.3.3),如果我生成一个新的密钥对,这似乎可以用于签署清单 . 但是,如果我尝试使用此PFX对程序集进行签名,则会出现以下错误:

无法导入以下密钥文件:mycert.pfx . 密钥文件可能受密码保护 . 要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_A48FA8964C1342C1导入密钥文件“mycert.pfx”已取消 .

我证实了这一点

  • 证书通过KeyPal强名称CSP .

  • PFX确实包含私钥 .

我已尝试以下方法来解决此问题:

  • 通过MMC删除证书,并通过Visual Studio(项目属性→签名中的'Select from File'选项),MMC,控制台(certutil)和资源管理器中的'Install PFX'向导将其重新添加到我的个人商店 . 这些似乎没有任何区别 .

  • 使用sn从CSP中删除证书并使用sn和Visual Studio重新添加证书,只需从签名程序集中选择PFX(即使它已存在于下拉列表中,您也必须选择 <Browse> ) . 这些似乎都没有任何区别 .

  • 更改PFX文件上的密码,这仅显示更改错误中 VS_KEY_ 之后出现的哈希值 . 更改密码后执行上述任何操作似乎没有任何区别 .

  • 使用 sn -p 从PFX生成SNK并使用该SNK对程序集进行签名 . 这会导致以下错误:

签署程序集'myproj.dll'时出现加密失败 - '错误签署程序集 - 参数不正确 . “

正如我所说,我可以通过在Visual Studio中选择 <New> 来使用生成的密钥对对程序集进行签名 . 但是,我真的很想知道如何使用我用于清单的相同PFX来签署此程序集 . 有什么建议?