我最近得到了一个Yubikey,并开始使用它......好吧......我能做的所有与公钥/私钥操作相关的事情。在过去,我在公共git仓库中意外泄露了我的强名称密钥对,我决定将我的项目设置为使用AssemblyKeyNameAttribute
,将其指向我的代码签名密钥的容器名称,该密钥存储在Yubikey(我为所有感兴趣的人记录了混乱,here。)
因为当CSP设置为默认值时,sn.exe
无法找到密钥集(我假设'Microsoft Base Crypto Provider v1'),所以我必须至少执行一次sn.exe -c "Microsoft Base Smart Card Crypto Provider"
运行构建。更糟糕的是,这必须以管理员身份执行,但密钥只能作为非提升用户检索,迫使我编写PowerShell script,在预构建中提升以运行该命令。
问题是,这会提升每个构建,这很烦人。我还遇到了使用不同版本的sn.exe
来重置CSP的情况(因此我可以生成一次性的公共/私有密钥对,用于强命名为弱名称的库,但我没有“作者”,停止了构建能够找到我的密钥,尽管使用相同的版本将其设置为返回到智能卡CSP(我可以用错误的版本打破它,但只能修复它特定版本。)
我想在我的脚本中添加一个步骤,以查找当前设置的 CSP,以便它可以跳过提升以更改它,如果它不需要并且能够获得这些信息也可以帮助我解决我在sn.exe
没有切换回智能卡提供商时遇到的奇怪问题。
有谁知道如何获得sn.exe
,csc.exe
(并希望ilasm.exe
和其他人)配置使用的当前CSP的价值?或者,有没有办法指定用于查找AssemblyKeyNameAttribute
中指定的密钥的CSP,允许我首先跳过所有这些废话?