web-dev-qa-db-fra.com

Le certificat X.509 ne peut pas être trouvé avec "FindBySubjectName"

Après une lutte brutale avec la sécurité de la WCF, je pense être au stade final et pouvoir voir la lumière.

Un certificat client est installé sur mon serveur et se trouve maintenant, comme indiqué, dans le dossier Personnes de confiance du magasin de certificats.

Cependant, lorsque j'essaie de lire l'application de certificat -> service, j'obtiens cette erreur:

Impossible de trouver le certificat X.509 avec les critères de recherche suivants: StoreName 'My', StoreLocation 'CurrentUser', FindType 'FindBySubjectName', FindValue 'Forename Name'.

Le nom de famille étant la partie "délivré" de mon certificat. Dans tous les tutoriels que j'ai vus, il ne s'agit que d'un mot; est-ce le problème? J'ai reçu mon certificat de mon CA avec ces deux mots, avec un espace.

Quelqu'un a-t-il déjà découvert cela? Y a-t-il quelque chose que je me trompe manifestement?

Mise à jour, cert peut être vu ici:

enter image description here

Mettre à jour: 

Cela devient encore plus étrange:

J'ai installé Visual Studio sur mon serveur Web et utilisé le code suivant pour récupérer le certificat par Thumbprint: 

var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "71995159BFF803D25BFB691DEF7AF625D4EE6DFB", false);

Cela renvoie en fait un résultat valide. Cependant, lorsque je mets ces informations dans le fichier Web.config de mon service/client, le message d'erreur persiste.

13
Chris Dixon

Je pense..Vous avez installé le certificat à l'emplacement Personnes de confiance et en recherchant le nom du magasin my

var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificateSubject, false);

De plus, il existe deux termes de recherche FindBySubjectName ou FindBySubjectDistinguishedName, ce dernier est plus pertinent avec les mots-clés et le premier trouve n'importe quoi avec les mots-clés de recherche.

Donc, fondamentalement, vous devez rechercher Subject et si vous utilisez le code ci-dessus, votre chaîne de recherche sera alors .. "CN = urs.Microsoft.com, O = DO_NOT_TRUST, OU = Créé par http://fiddler2.com "

Certificate properties

13
paragy

https://i.stack.imgur.com/QtYvV.png

private X509Certificate2 GetCertificateFromStore()
        {
            var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            var certCollection = store.Certificates;
            var currentCerts = certCollection.Find(X509FindType.FindBySubjectDistinguishedName, "CN=sf.sandbox.mapshc.com", false);
                return currentCerts.Count == 0 ? null : currentCerts[0];
        }
1
Sagaya Amalraj