9

我正在尝试对 tSQLt 框架进行一些改进,并且我已经完成了大部分工作,但由于与我没有触及的证书相关的少数测试仍然失败,因此无法做到这一点:

 [exec] |18|[InstallExternalAccessKeyTests].[test creates correct certificate in master]                                                       |    120|Failure|
 [exec] |19|[InstallExternalAccessKeyTests].[test tSQLt can be set to EXTERNAL ACCESS after InstallExternalAccessKey executed]                 |    333|Failure|
 [exec] |20|[InstallExternalAccessKeyTests].[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr]                    |     10|Failure|

失败的错误是:

Expected: %publickeytoken=8c9a92de0f9c7794,%
Actual: tsqltclr, version=1.0.7216.13228, culture=neutral, publickeytoken=8d3f4bf59e4c22fd, processorarchitecture=msil

我将尝试描述我的安装过程。

我使用以下指南安装了这个框架源。但是,在那之后我无法启动该项目,因为它因以下错误而失败,并且整个问题的解决都在那个SO 帖子中完成:

[exec]
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2482,5):错误 MSB3325:无法导入以下密钥文件:tSQLtOfficialSigningKey.pfx。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书安装到具有以下密钥容器名称的强名称 CSP:VS_KEY_C20B79DE0583A5C1 [E:\Source\tSQLt\tSQLtCLR\tSQLtCLR\tSQLtCLR.csproj] [exec]
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2482,5):错误 MSB3321:导入密钥文件“tSQLtOfficialSigningKey.pfx”已取消。[E:\Source\tSQLt\tSQLtCLR\tSQLtCLR\tSQLtCLR.csproj]

为了解决这个问题,我为每个没有密码的项目创建了新密钥:

在此处输入图像描述

我看到它创建了snk文件,而不是原始pfx的 . 之后,我尝试再次运行构建,但由于我上面提到的错误而失败。

4

1 回答 1

0

如此处所述

为 Microsoft Visual Studio 2008 - 2015 构建项目时可能会出现以下错误。

错误无法导入以下密钥文件:mykey.pfx。密钥文件可能受密码保护。

无法导入以下密钥文件:mykey.pfx。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书安装到具有以下密钥容器名称的强名称 CSP:VS_KEY_C1D3ACB8FBF1AGK4

解决方案 1:

单击开始 > 所有程序 > Microsoft Visual Studio >Visual Studio 工具 > Visual Studio 命令提示符。键入以下命令

sn -i "c:\Pathtofile\.pfx" VS_KEY_C1D3ACB8FBF1AGK4

注意:带有 -i 参数的 sn.exe 将密钥对安装到名为的密钥容器中。将 PFX 文件重新导入Visual Studio。

解决方案 2:

  • 打开项目属性。

  • 单击“签名”部分。

  • 在显示“选择一个强名称密钥文件:”的地方,从下拉框中重新选择当前值

  • Visual Studio 现在将提示您输入密码。输入它。您可能会收到另一条错误消息:“尝试引用不存在的令牌”> 您可以简单地忽略此消息。

  • 点击“更改密码”按钮

  • 在所有三个框中输入原始密码,然后单击确定。如果你想改变

  • 您的密码(或者如果您的旧密码不符合复杂性要求),您现在可以这样做。

  • 对项目中的每个密钥文件重复此操作。保存您的项目并进行重建。

解决方案 3:

在 slproweb.com 上获取适用于 windows 的 openssl 副本,或者使用 Linux 机器,因为他们几乎都拥有它。运行以下命令导出到密钥文件

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

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

然后在项目属性中,您可以使用 PFX 文件

解决方案 4:

此问题的最终解决方案是放弃使用 Visual Studio 进行签名,而改用Signtool

更新的答案

您的 TFS 构建服务帐户似乎没有访问构建代理机器上的 signingKey.pfx 所需的权限。确保您首先在构建代理机器上有此文件。

然后按照以下步骤操作:

  1. 以本地构建服务帐户登录构建代理(最好有管理员权限)

  2. 打开 Visual Studio 命令提示符并导航到存储密钥的目录

  3. 键入命令sn –i signingKey.pfx VS_KEY_EFCA4C5B6DFD4B4F(确保您使用出现在错误消息中的键名)

  4. 当提示输入密码时,输入 pfx 文件的密码

  5. 然后重建它

注意:如果您没有以管理员身份运行 Visual Studio,也请尝试这样做。

更多详细信息,您可以参考 Brandon Manchester的答案 无法导入密钥文件“blah.pfx” - 错误“密钥文件可能受密码保护”

于 2019-11-01T08:21:52.680 回答