Une X509Certificate être récupérée dans le magasin de certificats par ASP.NET sans autorisations de système de fichiers?
-
20-12-2019 - |
Question
Où dois-un certificat qui apparaît dans la Trusted Root Certification Authorities
nœud certmgr.msc être conservé ainsi que d'un IIS web app peut l'obtenir et de signer une Assertion SAML avec elle?Est-il un moyen pour extraire le certificat de l'certificats de "la ruche" directement, qui ne nécessite pas d'autorisations de système de fichiers?Ou est-il nécessaire à l'exportation du certificat à un dossier dans lequel le IIS7 intégré utilisateur possède les autorisations d'accès?
L' X509Certificate2.Import()
la méthode du premier paramètre est fileName
.
Si j'ai exporter le Certificat et placez le fichier dans mon Projet Visual Studio 2012 hiérarchie de dossiers et de fournir un chemin d'accès complet à l' Import() méthode, le cert importation réussit, mais seulement si l'application est en cours d'exécution dans Visual Studio intégré serveur, pas si il fonctionne dans le Local Serveur Web IIS.
J'ai essayé d'utiliser le Nom Convivial avec X509KeyStorageFlags.MachineKeySet
mais cela ne fonctionne pas.
EDIT:Cela fonctionne lorsque vous utilisez Visual Studio serveur, mais pas le LOCAL Serveur IIS7 dans Windows 7:
certStore = New X509Store(StoreLocation.CurrentUser)
certStore.Open(OpenFlags.ReadOnly)
Dim thumbprint As String
thumbprint = ConfigurationManager.AppSettings("thumb").ToString
certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, False)
certStore.Close()
cert = certCollection(0)
j'ai donc besoin de savoir comment donner de la valeur par Défaut d'Application de la Piscine l'accès à ce certificat dans Windows 7.
La solution
Vous n'avez pas "importer", il suffit de créer une instance.Officiellement, vous ouvrez un magasin de clés et boucle à travers les certificats.Et oui, vous n'avez pas besoin de tout système de fichiers permission, cependant, pour accéder à la clé privée, votre identité de pool d'applications doit avoir l'autorisation de la clé, vous définissez l'autorisation dans le certificat de composant logiciel enfichable de la console mmc.
Edit:le code d'accès du certificat serait quelque chose comme:
var store = new X509Store( name, location );
store.Open( OpenFlags.ReadOnly );
foreach ( var cert in store.Certificates )
... loop and match, by thumbprint, friendly name or whatever else