Problèmes avec X509Store Certificats.Trouver FindByThumbprint
J'ai un problème lorsque j'utilise la méthode X509Store.Certificates.Find
public static X509Certificate2 FromStore(StoreName storeName,
StoreLocation storeLocation, X509FindType findType, string findValue)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
//findValue = "7a6fa503ab57b81d6318a51ca265e739a51ce660"
var results = store.Certificates.Find(findType, findValue, true);
return results[0];
}
finally
{
store.Close();
}
}
Dans ce cas, la Méthode Find renvoie 0 résultats (results.Count == 0
), mais si je mets de la findValue constante de la méthode de trouver le certificat.
public static X509Certificate2 FromStore(StoreName storeName,
StoreLocation storeLocation, X509FindType findType, string findValue)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
//findValue= "7a6fa503ab57b81d6318a51ca265e739a51ce660"
var results = store.Certificates.Find(findType,
"7a6fa503ab57b81d6318a51ca265e739a51ce660", true);
return results[0];
}
finally
{
store.Close();
}
}
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous avez copier /coller de l'empreinte numérique du certificat Windows boîte de dialogue informations dans votre code (ou dans un fichier de config si c'est un exemple simplifié). Fâcheusement, le premier caractère de l'empreinte zone de texte est le invisible Unicode "de gauche à droite-marque" caractère de contrôle. Essayez de sélectionner l'ouverture de la chaîne de devis et le premier caractère de l'empreinte, de les supprimer (ce qui permettra également de se débarrasser du personnage invisible entre les deux), et de le retaper à la main.
J'ai été soumis à ce comportement bizarre moi-même aujourd'hui, et il m'a fallu plus d'une heure pour le comprendre. La façon dont je l'ai enfin vu qu'il était par l'utilisation du débogueur pour vérifier les longueurs et les codes de hachage de
findValue
et de laThumbprint
du certificat de l'objet, qui s'est avéré être différent. Cela m'a conduit à inspecter les tableaux de caractères de ces chaînes dans le débogueur, où le personnage invisible a montré jusqu'à.J'ai pris quelques réponses ici et les a combinés dans une méthode statique qui prend soin de supprimer les caractères spéciaux et majuscules tout. J'espère que quelqu'un d'autre peut l'utiliser.
J'ai eu le même Problème et résolu:
J'ai copié l'Empreinte digitale à partir de mmc directement à VS. J'ai comparé les cordes et n'a trouvé aucune différence.
Vérification de la longueur de hachage.longueur, il y a une différence, 41 vs 40.
Il y a un invisible Char ajouté à la chaîne par la copie de mmc.
De problèmes:
Il travaille.
Je suis tombé victime de cette. Non seulement il y a une Unicode "gauche-droite" de caractères dans la console Windows composant logiciel enfichable de l'affichage de l'empreinte, mais il avait aussi de minuscules caractères hexadécimaux, avec des espaces entre chaque groupe de deux caractères. La sortie de la commande CertUtil avait aussi des caractères en minuscules, et des espaces. Pour obtenir un match, j'ai eu de spécifier le findValue comme une chaîne de caractères qui a été transformé à la
Cette trébuché moi aussi, j'ai écrit cette fonction pour nettoyer l'empreinte lorsqu'il est copié et collé à partir de MMC:
Ce code devrait fonctionner.
Je suppose que vous avez copié cette empreinte numérique du certificat de gestion de la console.
Et que la valeur copiée contient unicode non lisible symbole qui est invisible dans Visual Studio. Essayez de supprimer la première invisible symbole et si c'est ce que je pense,
cela devrait fonctionner.
Remplacer le code à trouver votre certificat dans le magasin comme ci-dessous:
Également le 3ème paramètre qui est de retour bool certificats uniquement si le certificat est valide. Donc, assurez-vous que votre certificat est valide. Si vous avez un certificat auto-signé ou alors juste passer le 3ème paramètre à être "faux"
Je suis tombé sur cette même chose. Je n'arrivais pas à trouver cette réponse n'importe où dans ici, donc je vais le poster. Il me semble que le X509Store fonction recherche juste a plat ne fonctionne pas. J'ai vérifié cela par une simple boucle for et la récupération de la cert manuellement.
Je pense que tu veux dire le 2ème paramètre à être "findValue".
Ici est la version simple de code pour les suggestions ci-dessus - bien sûr, qui est travaillé pour moi
Je rencontre cette invisible char Unicode ainsi. Essayez d'utiliser le bloc-notes (Windows 10) d'une certaine manière n'a pas bien fonctionné pour moi non plus. Enfin, j'ai utiliser PowerShell pour obtenir le propre empreinte hex:
TELLEMENT de char Unicode.
Juste pour vous laisser savoir ce que le personnage invisible est, je vois l'empreinte dans la console mmc être: 75 3a ...
Puis-je copier et coller dans mon vim, je vois les suivantes:
<200e>75 3a ...
Ainsi, après que vous vous débarrasser de la première char "<200e>" et les espaces supplémentaires, vous serez amende.