Używam tego kodu, aby znaleźć certyfikat na podstawie jego odcisku palca. certyfikat istnieje w menedżerze certyfikatów w osobistym magazynie certyfikatów, ale ten kod nie znajduje tego certyfikatu.
Proszę, powiedz mi, gdzie robię źle.
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
źródło
źródło
X509Store
implementuje,IDisposable
więc powinien być używany zusing
instrukcją.Odpowiedzi:
Po prostu natknąłem się na to pytanie, szukając tego samego problemu w Google, i znalazłem odpowiedź tutaj : jeśli, tak jak ja, uzyskałeś „źródłowy” odcisk palca z MMC, podświetlając odcisk kciuka i kopiując go do schowka, prawie na pewno złapałeś niewidoczny znak na początku ekranu, więc:
jest aktualne
Jeśli usuniesz ten niewidoczny znak (możesz powiedzieć, że jest tam, gdy naciśniesz klawisz Backspace lub usuń obok niego i nic się nie dzieje) lub po prostu ponownie wpisz ręcznie odcisk palca, kod powinien działać dobrze. Gdyby tylko Visual Studio miało opcję „pokaż niewidoczne znaki” ...
źródło
Literał ciągu zawierający odcisk palca ma na początku znak od lewej do prawej . Gdy MMC wyświetla właściwości certyfikatu, poprzedza wartość odcisku palca tym znakiem, dzięki czemu bajty szesnastkowe są wyświetlane od lewej do prawej, nawet w ustawieniach regionalnych, w których tekst jest zwykle renderowany od prawej do lewej.
Prawdopodobnie był to skrót, który ktoś wybrał, ponieważ łatwiej było dołączyć znak przed jedną z wartości na liście właściwości niż napisać fragment kodu dynamicznie aktualizujący styl kontrolki edycji. Być może była to szybka poprawka do zgłoszenia błędu podczas testowania lokalizacji.
W MMC znacznik od lewej do prawej ma niezerową szerokość, co można zaobserwować, obserwując przesuwanie się kursora po strzale w poprzek i zauważając, że pierwszy rząd bajtów szesnastkowych jest przesunięty nieznacznie w prawo w porównaniu z drugi rząd.
W innych edytorach, takich jak Visual Studio, znacznik od lewej do prawej nie ma szerokości, ale nadal można go obserwować, zauważając, że kursor nie porusza się, gdy strzałka w poprzek jest. Jak odpowiedział KenD, usunięcie tej postaci rozwiązuje problem.
Szybki sposób na zidentyfikowanie niewidzialnego znaku: Użyj klawiatury, aby wybrać niewidoczny znak; następnie wklej go do programu Word między normalnymi znakami. Wybierz go w programie Word; następnie kliknij Wstaw> Symbol> Więcej symboli. Poszukaj w lewym dolnym rogu pod „Nazwa Unicode”.
źródło
aby upewnić się, że te znaki „\ u200e” i RTL „\ u200f” zostały usunięte z ciągu odcisku palca, wykonaj następujące czynności
thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);
ostatnia zamiana ciągu na usunięcie białych znaków nie jest całkowicie konieczna, ponieważ znajduje mój certyfikat z nimi lub bez nich.
inne kłopotliwe postacie Unicode można znaleźć tutaj
Tablica kodowania UTF-8 i znaki Unicode
źródło
Moje dwa centy: skopiowałem wartość w MMC i wkleiłem ją w VS z włączonymi White Spaces.
Na początku nie było nic poza spacją na końcu: „1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”
Teraz w pliku web.config wkleiłem wartość zachowując wszystkie spacje wewnątrz, usuwając ostatnią spację: „1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”
To działa dobrze.
Jeśli użyję „1e52730d0029e6857be623e2fac7a508ac365e57”, usunięcie przestrzeni wewnątrz, jak widzę w innych postach, nie działa ...
Mam nadzieję, że to pomoże;)
źródło
Uruchamiam ten skrypt PowerShell, aby uzyskać wszystkie odciski palców i przekierować dane wyjściowe do pliku tekstowego i skopiować stamtąd odcisk palca.
Aby przekierować do wyjścia do pliku tekstowego, użyj tego:
źródło
Wykonałem następujące czynności, aby usunąć dodatkowy znak, a także usunąć wszystko, co nie jest poprawne szesnastkowo (i ToUpper it):
thumbprint = Regex.Replace(thumbprint.ToUpper(), @"[^0-9A-F]+", string.Empty);
To pozwoliło mi skopiować odcisk palca bezpośrednio z okna dialogowego menedżera certyfikatów i wkleić go bezpośrednio do mojego użycia.
źródło
Udało mi się rozwiązać problem, pisząc aplikację konsolową, która pobiera wszystkie certyfikaty z certyfikatu i wyświetla identyfikator odcisku palca. Skopiowałem wyjście konsoli i dokładnie włożyłem odcisk palca. Nie ma problemów. Wydaje się, że kopiowanie z konsoli MMC powoduje problemy, mimo że dane wyglądają podobnie. Użyłem tej strony jako punktu wyjścia do czytania wszystkich certyfikatów.
https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx
źródło