对于在.NET中使用sn.exe签署程序集,是否可以指定一个公用密钥,其私钥仅包含在Windows CryptoAPI密钥库中?sn.exe可以使用Windows证书存储吗?
我看到指定CSP名称和容器名称的选项。
是否有值用于访问Windows证书? (即可从Windows EFS,Outlook,Internet Explorer等访问的那些)
谢谢。
评论:具体而言,我问这是因为有几个键没有标记为可导出的私钥,所以我无法导出.pfx并遵循该路线。
对于在.NET中使用sn.exe签署程序集,是否可以指定一个公用密钥,其私钥仅包含在Windows CryptoAPI密钥库中?sn.exe可以使用Windows证书存储吗?
我看到指定CSP名称和容器名称的选项。
是否有值用于访问Windows证书? (即可从Windows EFS,Outlook,Internet Explorer等访问的那些)
谢谢。
评论:具体而言,我问这是因为有几个键没有标记为可导出的私钥,所以我无法导出.pfx并遵循该路线。
我在本周末有同样的问题。
YES,它可以被配置为使用Windows证书商店,如果你是真正的安全意识,你应该绝对做到这一点。这使得意外泄露私钥非常困难(并且如果您使用像Yubikey这样的智能卡,则无法泄漏私钥 - 操作系统从不会看到它)。
我记录了如何在twodifferent中做到这一点,但在我的博客上的帖子中有相关的礼节。
如果您只是在个人证书商店中使用证书,但不使用智能卡,则相对容易。
在PowerShell中,你需要得到你的证书的详细信息:
Set-Location "cert:\Path\To\Your\Certificate"
# Usually "cert:\CurrentUser\My" is what you want
$cert=Get-Item ".\(your-certificate-thumbprint)"
您需要确定密钥容器名称和CSP这是我们用来访问密钥容器(如果它不是一个智能卡中,默认的CSP工程)
$cert=Get-Item .\(ThumbprintOfYourKey)
$cert.PrivateKey.CspKeyContainerInfo | fl *
这将产生类似以下的东西:
MachineKeyStore : False
ProviderName : Microsoft Base Smart Card Crypto Provider
ProviderType : 1
KeyContainerName : c0f031c2-0b5e-171b-d552-fab7345fc10a
UniqueKeyContainerName : c0f031c2-0b5e-171b-d552-fab7345fc10a
KeyNumber : Signature
Exportable : False
HardwareDevice : True
Removable : True
Accessible : True
Protected : True
CryptoKeySecurity : System.Security.AccessControl.CryptoKeySecurity
RandomlyGenerated : False
就我而言,我使用的是Yubikey,所以CSP是“Microsoft Base Smart Card Crypto Provider”。这意味着,以强名称标记我的代码,我需要运行:
sn.exe -c "Microsoft Base Smart Card Crypto Provider"
在某些时候,我才建(只有一次,它不需要运行,每次构建,但是,我已经与一些脚本在关于这个主题的第二篇文章中有帮助)。
这里有两个选项:你告诉sn.exe创建一个只包含公钥和延迟符号的密钥(勾选项目属性中“签名”选项卡底部的框) ,然后生成后,签订使用sn.exe -Rc "your-container-name" "key.snk"
,或者你可以用简单的方法:在AssemblyInfo.cs
文件如下AssemblyKeyNameAttribute
:
[assembly: AssemblyKeyNameAttribute("Your Key Container Name")]
编译器将处理一切为您服务。请记住,您需要确保在尝试构建之前使用sn.exe -c
来设置您的CSP,否则您将获得键集找不到构建错误(以及您的密钥容器的名称)。
我在Machine Stores上找到了MSDN文章,但是这涉及到ActiveDirectory权限管理。我也无法找到它所谈论的DRM目录。尽管如此,还有一个目录Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys,以及几个仅以序列号或GUID命名的文件。 (256bit-hex)_(32bit) - (16bit) - (16bit) - (16bit) - (48bit)是文件名的格式。这些是可用/可寻址的以识别sn.exe的公钥? – maxwellb 2009-06-15 22:22:22