在Sn.exe中自动输入密码

HJ.*_*HJ. 7 c# signing sn.exe

我需要创建post build事件来执行以下操作:

sn -i MyKey.pfx MyKeyContainerName
tlbimp $(ConfigurationName)\MyCom.tlb /out:$(ConfigurationName)\NETMyCom.dll /keycontainer:MyKeyContainerName
sn -d MyKeyContainerName
Run Code Online (Sandbox Code Playgroud)

当Visual Studio执行第一个语句时,它需要一个密码并等待用户指定并失败.

Microsoft(R).NET Framework强名称实用程序版本2.0.50727.42版权所有(c)Microsoft Corporation.版权所有.

输入PKCS#12密钥文件的密码:无法解析mykey.pfx中的PKCS#12 blob - 句柄无效.

我尝试使用sn命令行参数指定密码,但我看不到这样做的方法.

请帮忙.

此致,希尔米.

Hon*_*scz 6

不幸的是,这里提到的方法对我没有用。我必须在 docker 容器中注册几个 pfxs。

因此,我sn.exe -i <infile> <container>使用RSACryptoServiceProvider在 C# 中重新开发了该 命令。源代码和应用程​​序位于 GitHub 的SnInstallPfx项目中。

SnInstallPfx应用程序接受一个PFX密钥和密码。它会自动计算密钥容器名称 (VS_KEY_*)(从 MSBuild 源代码中借用)并将其安装到强名称 CSP。

用法:

SnInstallPfx.exe <pfx_infile> <pfx_password>
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 3

如果像我一样,您没有使用 TFS 或 MSBUILD 来构建,那么至少还有其他 2 种方法:

a) 从脚本运行 sn.exe,并将密码写入 stdin

请参阅此处的 C# 示例:

注意:使用 .NET4 版本的 sn.exe 似乎不可能将其作为外部进程执行(至少在 Windows XP 上),并将密码写入标准输入(我尝试使用 python + 和 C#,sn.exe 似乎直接退出而不等待密码输入)。

b) 使用 sn.exe 使用已安装的 pfx 重新签名密码。

如果您已经安装了 pfx 文件,那么您可能知道容器名称(通常 Visual Studio 使用类似 VS_KEY_ABAB1234ABAB1234 之类的名称)

如果像我一样,您不知道或记住容器名称,则只需重新安装 pfx 文件:

sn -i myPfxFile VS_KEY_ABAB1234ABAB1234
Run Code Online (Sandbox Code Playgroud)

sn.exe 将提示您输入密码,因为它将证书安装在 pfx 文件中。

然后,您可以让 sn.exe 重新签署您的程序集,而不会提示输入密码:

sn -Rca myAssembly.dll myVSkey
Run Code Online (Sandbox Code Playgroud)

上面的内容可以在构建脚本中使用,因为不需要交互:-)

请注意,请记住检查签名是否确实有效:

sn -v myAssembly.dll
Run Code Online (Sandbox Code Playgroud)