Ich verwende diesen Code, um das Zertifikat anhand seines Fingerabdrucks zu finden. Das Zertifikat ist im Zertifikatmanager im persönlichen Zertifikatspeicher vorhanden, aber dieser Code findet dieses Zertifikat nicht.
Bitte sag mir, wo ich falsch mache.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string certThumbPrint = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";
X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
// Try to open the store.
certStore.Open(OpenFlags.ReadOnly);
// Find the certificate that matches the thumbprint.
X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint, certThumbPrint, false);
certStore.Close();
// Check to see if our certificate was added to the collection. If no,
// throw an error, if yes, create a certificate using it.
if (0 == certCollection.Count)
{
Console.WriteLine("Error: No certificate found containing thumbprint " );
}
Console.ReadLine();
}
c#
x509certificate
RATHI
quelle
quelle
X509Store
implementiert,IDisposable
so dass es mit einerusing
Anweisung verwendet werden sollte.Antworten:
Ich bin gerade über diese Frage gestolpert, als ich nach demselben Problem gegoogelt habe, und habe hier die Antwort gefunden : Wenn Sie wie ich Ihren "Quell" -Fingerabdruck von MMC erhalten haben, indem Sie den Fingerabdruck hervorgehoben und in die Zwischenablage kopiert haben, haben Sie mit ziemlicher Sicherheit einen gefunden unsichtbares Zeichen am Anfang des Bildschirms, also:
ist eigentlich
Wenn Sie dieses unsichtbare Zeichen löschen (Sie können feststellen, dass es vorhanden ist, wenn Sie die Rücktaste drücken oder daneben löschen und nichts zu passieren scheint) oder den Fingerabdruck einfach von Hand erneut eingeben, sollte Ihr Code einwandfrei funktionieren. Wenn nur Visual Studio die Option "Unsichtbare Zeichen anzeigen" hätte ...
quelle
Das Zeichenfolgenliteral mit Ihrem Fingerabdruck hat am Anfang eine Markierung von links nach rechts . Wenn MMC die Zertifikateigenschaften auflistet, wird dem Fingerabdruckwert dieses Zeichen vorangestellt, sodass die Hex-Bytes auch in Gebietsschemas, in denen der Text normalerweise von rechts nach links gerendert wird, von links nach rechts aufgelistet werden.
Wahrscheinlich war dies eine Verknüpfung, die jemand verwendet hat, weil es einfacher war, einem der Werte in der Eigenschaftsliste ein Zeichen voranzustellen, als ein bisschen Code zu schreiben, um den Stil des Bearbeitungssteuerelements dynamisch zu aktualisieren. Vielleicht war es eine schnelle Lösung für einen Fehlerbericht während der Lokalisierungstests.
In der MMC hat die Markierung von links nach rechts eine Breite ungleich Null. Sie können dies beobachten, indem Sie beobachten, wie sich der Cursor bewegt, wenn Sie darüber streichen, und ich bemerke, dass die erste Reihe von Hex-Bytes im Vergleich zu leicht nach rechts verschoben ist zweite Reihe.
In anderen Editoren wie Visual Studio hat die Markierung von links nach rechts keine Breite. Sie können sie jedoch beobachten, indem Sie feststellen, dass sich der Cursor beim Überfahren nicht bewegt. Wie KenD antwortete, löst das Löschen dieses Zeichens das Problem.
Schneller Weg, um das unsichtbare Zeichen zu identifizieren: Verwenden Sie die Tastatur, um das unsichtbare Zeichen auszuwählen. Fügen Sie es dann zwischen einigen normalen Zeichen in Word ein. Wählen Sie es in Word aus. Klicken Sie dann auf Einfügen> Symbol> Weitere Symbole. Schauen Sie unten links unter "Unicode-Name" nach.
quelle
Gehen Sie wie folgt vor, um sicherzustellen, dass die Zeichen LTR "\ u200e" und RTL "\ u200f" aus Ihrer Fingerabdruckzeichenfolge entfernt werden
Das letzte Ersetzen der Zeichenfolge für die Entfernung von Leerzeichen ist nicht vollständig erforderlich, da mein Zertifikat mit oder ohne diese gefunden wird.
Weitere störende Unicode-Zeichen finden Sie hier
UTF-8-Codierungstabelle und Unicode-Zeichen
quelle
Meine zwei Cent: Ich habe den Wert in MMC kopiert und in VS mit aktivierten Leerzeichen eingefügt.
Am Anfang war nichts als ein Leerzeichen am Ende: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"
Jetzt habe ich in die Datei web.config den Wert eingefügt, der alle darin enthaltenen Leerzeichen beibehält, und das letzte Leerzeichen entfernt: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"
Das funktioniert gut.
Wenn ich "1e52730d0029e6857be623e2fac7a508ac365e57" verwende, funktioniert es nicht, den Platz im Inneren zu entfernen, wie ich in anderen Posts sehe ...
Hoffe das kann helfen;)
quelle
Ich habe Folgendes getan, um das zusätzliche Zeichen zu entfernen und um alles andere zu entfernen, was nicht hexadezimal gültig ist (und um es zu verbessern):
Dadurch konnte ich den Fingerabdruck direkt aus dem Zertifikatmanager-Dialogfeld kopieren und direkt in meine Verwendung einfügen.
quelle
Ich führe dieses Powershell-Skript aus, um alle Fingerabdrücke abzurufen, die Ausgabe in eine Textdatei umzuleiten und den Fingerabdruck von dort zu kopieren.
Verwenden Sie Folgendes, um zur Ausgabe in eine Textdatei umzuleiten:
quelle
Ich konnte das Problem beheben, indem ich eine Konsolenanwendung schrieb, die alle Zertifikate auf dem Zertifikat abruft und die Fingerabdruck-ID ausgibt. Ich habe die Konsolenausgabe kopiert und den Fingerabdruck genau eingefügt. Keine Probleme. Das Kopieren von der MMC-Konsole scheint Probleme zu verursachen, obwohl die Daten ähnlich aussehen. Ich habe diese Seite als Ausgangspunkt für das Lesen aller Zertifikate verwendet.
https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx
quelle