C # 'da parmak izine göre sertifika nasıl bulunur


82

Sertifikayı parmak izine göre bulmak için bu kodu kullanıyorum. sertifika, kişisel sertifika deposundaki sertifika yöneticisinde var, ancak bu kod bu sertifikayı bulamıyor.

Lütfen bana nerede yanlış yaptığımı söyle.

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();
}


X509Storeuygular, IDisposableböylece bir usingdeyimle birlikte kullanılmalıdır .
Alex Vallejo

Yanıtlar:


208

Aynı sorun için Google'da arama yaparken bu soruyu sadece tökezledim ve cevabı burada buldum : Eğer benim gibi MMC'den parmak izini vurgulayıp panoya kopyalayarak "kaynak" parmak izinizi aldıysanız, neredeyse kesinlikle bir ekranın başında görünmez karakter, yani:

string certThumbPrint = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";

aslında

dize certThumbPrint "= INVISIBLECHARACTER fe14593dd66b2406c5269d742d04b6e1ab03adb1";

Bu görünmez karakteri silerseniz (geri tuşuna bastığınızda veya yanını sildiğinizde orada olduğunu söyleyebilir ve hiçbir şey olmuyormuş gibi görünmez) veya parmak izini elle yeniden yazarsanız, kodunuz düzgün çalışmalıdır. Artık yalnızca Visual Studio "görünmez karakterleri göster" seçeneğine sahipse ...


2
VS'de Düzen> Gelişmiş> Beyaz Boşluğu Görüntüle (geçiş yapmak için Ctrl + R, Ctrl + W) vardır - neye bakacağınızı biliyorsanız yardımcı olabilir .
Michael Freidgeim

@MichaelFreidgeim yardımcı olmuyor. VS gizli karakterleri göstermez, sadece boşluk karakterlerini gösterir.
George Polevoy

@MichaelFreidgeim View White Space, en azından VS 2013'te bu belirli görünmez karakterleri göstermiyor.
Jeremy Cook

Ayrıca MMC'den seçip kopyalamaya da düştüm.
Mötz

3
KUTSAL @% $ @ $ !!! BU DESTANSI. Anında pencereyle oynayarak, "Foo" == "Foo" nun neden yanlış olduğunu merak ederek harcanan Saat. Siz efendim, bir oylamayı hak ediyorsunuz. TEŞEKKÜR EDERİM!
Thiago Silva

18

Parmak izinizi içeren dize değişmezinin başında soldan sağa bir işareti vardır . MMC sertifika özelliklerini listelediğinde, parmak izi değerinin önünde bu karakter bulunur, böylece onaltılık baytlar, metnin normalde sağdan sola işlendiği yerel ayarlarda bile soldan sağa listelenir.

Muhtemelen, bu bir kişinin kullandığı bir kısaydı çünkü özellik listesindeki değerlerden birine bir karakter eklemek, düzenleme kontrolünün stilini dinamik olarak güncellemek için biraz kod yazmaktan daha kolaydı. Belki de yerelleştirme testi sırasında bir hata raporu için hızlı bir çözümdü.

MMC'de soldan sağa işaret, sıfır olmayan genişliğe sahiptir; bu, imlecin ok yönüne doğru hareket ettiğini izleyerek gözlemleyebilirsiniz ve ilk onaltılık bayt satırının, ikinci sıra.

Visual Studio gibi diğer düzenleyicilerde, soldan sağa işaretinin genişliği yoktur, ancak yine de imlecin ok işaretinin üzerinde hareket etmediğini fark ederek gözlemleyebilirsiniz. KenD'nin cevapladığı gibi, bu karakteri silmek sorunu çözer.

Görünmez karakteri tanımlamanın hızlı yolu: Görünmez karakteri seçmek için klavyeyi kullanın; sonra bunu bazı normal karakterler arasında Word'e yapıştırın. Word'de seçin; ardından Ekle> Sembol> Diğer Semboller'e tıklayın. Sol altta "Unicode adı" altına bakın.


10

bu LTR "\ u200e" ve RTL "\ u200f" karakterlerinin parmak izi dizenizden kaldırıldığından emin olmak için aşağıdakileri yapın

thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);

sertifikamı onlarla birlikte veya onsuz bulduğundan, beyaz boşluğun kaldırılması için son dize değişikliği tamamen gerekli değildir.

diğer sorunlu unicode karakterleri burada bulunabilir

UTF-8 kodlama tablosu ve Unicode karakterleri


5

İki sentim: MMC'deki değeri kopyaladım ve Beyaz Boşluklar etkinleştirilmiş olarak VS'ye yapıştırdım.

Başlangıçta boşluktan başka bir şey yoktu: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

Şimdi, web.config dosyasına değeri, içindeki tüm boşlukları koruyarak yapıştırdım ve son boşluğu kaldırdım: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

Bu iyi çalışıyor.

"1e52730d0029e6857be623e2fac7a508ac365e57" kullanırsam, diğer yayınlarda gördüğüm gibi içindeki boşluğu kaldırırsam işe yaramaz ...

Umarım bu yardımcı olabilir;)


2

Tüm parmak izlerini almak ve çıktıyı bir metin dosyasına yeniden yönlendirmek ve parmak izini oradan kopyalamak için bu powershell betiğini çalıştırıyorum.

Get-ChildItem -path cert:\LocalMachine\My

Çıktıya bir metin dosyasına yeniden yönlendirmek için şunu kullanın:

Get-ChildItem -path cert:\LocalMachine\My > thumbprints.txt

Bunun için teşekkür ederim! Zaten bir sertifikam vardı ve bunu bilmiyordum. Bu bilmem gereken şeyi ortaya çıkardı.
rjacobsen0

2

Fazladan karakteri ve ayrıca geçerli onaltılık olmayan her şeyi (ve ToUpper) kaldırmak için aşağıdakileri yaptım:

            thumbprint = Regex.Replace(thumbprint.ToUpper(), @"[^0-9A-F]+", string.Empty);

Bu, parmak izini doğrudan sertifika yöneticisi iletişim kutusundan kopyalayıp doğrudan kullanımıma yapıştırmamı sağladı.


0

Sertifikadaki tüm sertifikaları alan ve parmak izi kimliğini veren bir konsol uygulaması yazarak sorunu çözebildim. Konsol çıktısını kopyaladım ve parmak izini tam olarak yerleştirdim. Sorun yok. Veriler benzer görünse de MMC konsolundan kopyalamak sorunlara neden oluyor gibi görünüyor. Bu siteyi tüm sertifikaları okumak için başlangıç ​​noktası olarak kullandım.

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.