Probleme mit X509Store-Zertifikaten.Finden Sie FindByThumbprint
Ich habe ein problem wenn ich die Methode 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();
}
}
In diesem Fall ist die Find-Methode gibt 0 Ergebnis (results.Count == 0
), aber wenn ich die findValue als Konstante der Methode das Zertifikat finden.
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();
}
}
InformationsquelleAutor der Frage nunofamel | 2011-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie müssen kopieren-einfügen den Fingerabdruck aus dem Windows-Zertifikats-Informations-dialog-box in Ihrem code (oder in eine config-Datei, wenn dies ist ein Vereinfachtes Beispiel). Dummerweise sind das erste Zeichen im Fingerabdruck textbox ist die unsichtbare Unicode "Links-nach-rechts-Marke" control character. Versuchen Sie, die Eröffnung string zitieren, und das erste Zeichen der Fingerabdruck, Sie zu löschen (auch die wird, loszuwerden, die unsichtbaren Zeichen), und das eintippen per hand.
Ich ausgesetzt war, zu diesem merkwürdigen Verhalten sich selbst heute, und es dauerte über eine Stunde, um es herauszufinden. Die Art und Weise, die ich endlich sah, war es mit dem debugger überprüfen Sie die Längen-und hash-codes der
findValue
und derThumbprint
des Zertifikats Objekt.InformationsquelleAutor der Antwort Aasmund Eldhuset
Nahm ich einige der Antworten, die hier zusammengefasst und in eine statische Methode, die kümmert sich um das entfernen von Sonderzeichen und oberen Fällen alles. Hoffentlich jemand anderes es verwenden kann.
InformationsquelleAutor der Antwort jhilden
Ich hatte das gleiche Problem und es gelöst:
Habe ich kopiert den Fingerabdruck von der mmc direkt auf VS. Ich verglich die Saiten und hat auch keinen Unterschied.
Überprüfung der Länge mit hash.Länge, es war ein Unterschied, 41 vs. 40.
Gibt es eine unsichtbare Char Hinzugefügt, um den string durch kopieren von mmc.
Lösung:
Es funktioniert.
InformationsquelleAutor der Antwort Thomas
Fiel ich zum Opfer. Es wurde nicht nur ein Unicode - "von-Links-nach-rechts" - Zeichen in der Windows-console-snap-in anzeigen der Fingerabdruck, aber es hatte auch Kleinbuchstaben hex-Zeichen, mit Leerzeichen zwischen jeweils zwei Zeichen. Die Ausgabe von CertUtil hatte auch Kleinbuchstaben und Leerzeichen. Um ein match zu bekommen, musste ich angeben, die findValue als eine Zeichenkette, die umgewandelt wurde, um
InformationsquelleAutor der Antwort Greg
Diese ausgelöst mich zu, ich schrieb diese Funktion reinigen Sie den Fingerabdruck, wenn Sie kopiert und eingefügt von MMC:
InformationsquelleAutor der Antwort Rob C
Dieser code sollte funktionieren.
Ich nehme an, Sie haben kopiert Fingerabdruck von der Zertifikats-management-Konsole.
Und dass die kopierten Wert enthält, die unicode nicht lesbar symbol, das unsichtbar ist in Visual Studio. Versuchen Sie, löschen Sie die erste unsichtbare symbol, und wenn dies ist, was ich denke,
sollte dies funktionieren.
InformationsquelleAutor der Antwort Dmitry
Ich lief in dieser gleichen Sache. Ich konnte Sie nicht finden, diese Antwort irgendwo in hier, also werde ich es posten. Es scheint für mich das X509Store finden, die Funktion war nur die flat nicht funktioniert. Ich habe überprüft dies durch eine einfache for-Schleife und dem abrufen der cert manuell.
InformationsquelleAutor der Antwort vikingben
Ich denke du meinst den 2. param "findValue".
InformationsquelleAutor der Antwort Joe
Ersetzen Sie den code finden Sie Ihr Zertifikat in den store wie folgt:
Auch der 3. Parameter die bool-return-Zertifikate nur, wenn das Zertifikat gültig ist. So stellen Sie sicher, dass Ihr Zertifikat gültig ist. Wenn Sie ein selbst signiertes Zertifikat oder so dann geben Sie nur den 3. Parameter auf "false"
InformationsquelleAutor der Antwort Rajesh
Hier ist die einfache version des Codes für die oben genannten Vorschläge - natürlich, die für mich gearbeitet
InformationsquelleAutor der Antwort Jay
Stoße ich auf dieses unsichtbare Unicode-Zeichen als gut. Versuchen Sie es mit Notepad (Windows 10) irgendwie nicht gut für mich. Schließlich habe ich die PowerShell verwenden, um die sauberen Fingerabdruck hex:
SO viel für Unicode-char.
InformationsquelleAutor der Antwort Riza Marhaban
Nur, damit Sie wissen, was die unsichtbaren Zeichen ist, sehe ich den Fingerabdruck in der mmc: 75 3a ...
Dann kopiere ich und füge es in meine vim, sehe ich Folgendes:
<200e>75 3a ...
So, nachdem Sie loszuwerden, die ersten Zeichen "<200e>" und die zusätzlichen Leerzeichen, du wirst in Ordnung sein.
InformationsquelleAutor der Antwort iefgnoix