Visual Studio 2010 程序集签名:尝试引用不存在的令牌

Posted

技术标签:

【中文标题】Visual Studio 2010 程序集签名:尝试引用不存在的令牌【英文标题】:Visual Studio 2010 Assembly Signing: An attempt was made to reference a token that does not exist 【发布时间】:2011-02-15 05:40:00 【问题描述】:

我正在尝试使用我们的 PFX 文件在 Visual Studio 2010 中对程序集进行签名,在我输入私钥的密码后,我得到“尝试引用不存在的令牌”

【问题讨论】:

【参考方案1】:

以管理员身份运行 Visual Studio 为我解决了这个问题。

【讨论】:

【参考方案2】:

我也有同样的问题。只需在 Visual Studio 命令提示符下使用 signtool 即可。有时signtool 会声称您的密码无效,但通常在尝试几次后它开始为我工作。

signtool.exe sign /f YOURCERT.pfx /p YOURPASSWORD YOURTARGET.exe

【讨论】:

Perfect 作为构建后步骤工作,只需更改为 signtool.exe sign /f YOURCERT.pfx /p YOURPASSWORD YOURTARGET.exe 我也遇到了疯狂的问题,最终不得不将 PFX 导入我的本地计算机商店并在后期构建中使用它:“%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\ bin\signtool.exe" 签名 /a /n "你的 CN" /sm /t timestamp.comodoca.com/authenticode "$(TargetPath)" 如何使用 ClickOnce 和清单签名来做到这一点?您不必在构建期间对其进行签名以使其正常工作吗? 效果很好。顺便说一句,最好给你的 exe 加上时间戳。您的证书提供商通常会为您提供时间戳服务器的 URL(例如 http:\\timestamp.digicert.com)。然后是这样的:signtool.exe sign /f YOURCERT.pfx /t YOURTIMESERVERURL /p YOURPASSWORD YOURTARGET.exe 对于 ClickOnce 位:mage.exe" -sign $(TargetPath).manifest -CertFile $(ProjectDir)MyPfx.pfx -Password MyPwd * mage.exe" -签名 $(TargetDir)$(TargetName).vsto -CertFile $(ProjectDir)MyPfx.pfx -Password MyPwd【参考方案3】:

如果您希望 Visual Studio 自动签署文件并使用 ClickOnce,这就是我必须做的:

获取OpenSSL 的副本。它是available for Windows。或者使用 Linux 机器,因为他们几乎都拥有它。

运行以下命令导出到密钥文件:

openssl pkcs12 -in certfile.pfx -out backupcertfile.key

openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key

然后在项目属性中就可以使用 PFX 文件了。

【讨论】:

等同于an answer to Cannot import the keyfile 'blah.pfx' - error 'The keyfile may be password protected' 所做的只是更改错误消息。现在它说 MD5 和是错误的。 @Beached:它对我有用,但解释一下这里发生的事情会很好。我不熟悉 openssl 或 pkcs12 命令。 感谢您,它在 2020 年仍在帮助人们! 优秀。在尝试了很多其他方法之后,这对我有用。谢谢。【参考方案4】:

这对我有用。

首先尝试在为您的项目启用密钥签名选项的情况下构建您的项目。构建将失败,转到“输出”窗口,您将看到如下错误:

错误 1 ​​无法导入以下密钥文件:MyKey.pfx。这 密钥文件可能受密码保护。要更正此问题,请尝试导入 再次证书或手动将证书安装到 Strong 使用以下密钥容器名称命名 CSP: VS_KEY_7B9423FE45F4DBEB Project.SomeName

保存密钥库名称(例如 VS_KEY_7B9423FE45F4DBEB),稍后您将需要它。

现在按照以下步骤操作:

    在 Windows 证书存储中导入数字证书密钥 (PFX)。在 Windows 资源管理器中双击 PFX 密钥并将其安装/导入到您的密钥存储区(我实际上是通过选择手动选择存储区将其导入到受信任的根证书存储区)。 以普通用户身份启动 Visual Studio 2010(作为管理员,我不会遇到此密钥签名问题,但我想以用户身份调试我的应用程序)(在整个过程中保持打开状态) 从开始菜单打开Visual Studio Command Prompt (2010) 快捷方式(x64,如果您在 x64 机器上)作为管理员(右键单击 Visual Studio 2010 命令提示符快捷方式并选择以管理员身份运行)。这应该会打开一个带有 Visual Studio 环境设置的管理命令提示符。 (不是常规的命令提示符) 在命令提示符中,输入 sn -d VS_KEY_xxxx 以及您在开头保存的错误消息中的密钥库名称 然后输入sn -i xxx.pfx VS_KEY_xxxx,提示时输入密码,如果是数字证书则输入xxx.pfx 返回 Visual Studio 并重建您的项目

【讨论】:

以上是关于Visual Studio 2010 程序集签名:尝试引用不存在的令牌的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Visual Studio 中使用 SHA256 对程序集进行签名时出错

Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?

Visual Studio 设计器无法加载文件或程序集

Visual Studio 2010 SP1 可以安全安装吗?Assembly 签名到底是啥?

Microsoft Visual Studio 2010修改项目名称

如何在 Visual Studio 2010 中添加 PNG 资源?