J'ai eu la même question à la fin de cette semaine.
OUI, il peut être configuré pour utiliser le magasin de certificats Windows et si vous être vraiment conscient sécurité, vous devez absolument faire. Il est très difficile de fuir accidentellement la clé privée (et si vous utilisez une carte à puce comme un Yubikey, cela rend impossible la fuite de la clé privée - le système d'exploitation ne la voit jamais).
J'ai documenté comment faire cela dans twodifferent, mais liés, manières dans les messages sur mon blog.
Si vous utilisez simplement un certificat dans votre magasin de certificats personnel, mais que vous n'utilisez pas de carte à puce, c'est relativement facile.
Dans PowerShell, vous devez obtenir les détails de votre certificat:
Set-Location "cert:\Path\To\Your\Certificate"
# Usually "cert:\CurrentUser\My" is what you want
$cert=Get-Item ".\(your-certificate-thumbprint)"
Vous devez déterminer le nom du conteneur clé et CSP qui est utilisé pour accéder à ce conteneur de clé (si ce n'est pas une carte à puce, la par défaut fonctionne CSP)
$cert=Get-Item .\(ThumbprintOfYourKey)
$cert.PrivateKey.CspKeyContainerInfo | fl *
Cela produira quelque chose de semblable à ce qui suit:
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
Dans mon cas, j'utilise un Yubikey, donc le CSP est "Microsoft Base Crypto Provider Card". Cela signifie pour nom fort signer mon code, je dois courir:
sn.exe -c "Microsoft Base Smart Card Crypto Provider"
À un certain moment avant de construire (une seule fois, il n'a pas besoin d'être exécuté à chaque génération, mais je l'ai lié à certains scripts aider avec cela dans le deuxième post sur ce sujet).
Deux options s'offrent à vous: vous indiquez à sn.exe de créer une clé contenant uniquement la clé publique et le signe de retard avec cette touche (cochez la case en bas de l'onglet "Signature" dans les propriétés du projet) , puis post-construction, inscrivez-vous à l'aide sn.exe -Rc "your-container-name" "key.snk"
ou vous pouvez utiliser la voie facile: AssemblyKeyNameAttribute
dans le fichier AssemblyInfo.cs
comme suit:
[assembly: AssemblyKeyNameAttribute("Your Key Container Name")]
le compilateur traitera tout le reste pour vous.Gardez à l'esprit que vous devez vous assurer que votre CSP est définie en utilisant sn.exe -c
avant vous essayez de construire ou vous obtiendrez une erreur Keyset pas trouvé lors de la construction (avec le nom de votre conteneur de clé).
J'ai trouvé l'article MSDN sur les magasins d'ordinateurs, mais il s'agit de la gestion des droits ActiveDirectory. Je ne trouve pas non plus le répertoire DRM dont il est question. Cependant, il y avait un répertoire Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys, et plusieurs fichiers nommés avec juste un numéro de série ou un GUID. (256bit-hex) _ (32bit) - (16bit) - (16bit) - (16 bits) - (48bit) est le format du nom de fichier. Sont-ils utilisables/adressables pour identifier la clé publique de sn.exe? – maxwellb