C#で拇印で証明書を見つける方法


82

このコードを使用して、拇印で証明書を検索しています。証明書は個人証明書ストアの証明書マネージャーに存在しますが、このコードはその証明書を検出していません。

どこが間違っているのか教えてください。

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


X509Storeを実装するIDisposableため、usingステートメントとともに使用する必要があります。
アレックス

回答:


208

同じ問題をグーグルで検索しているときにこの質問に出くわし、ここで答えを見つけました。私のように、拇印を強調表示してクリップボードにコピーすることでMMCから「ソース」拇印を取得した場合、ほぼ確実に画面の開始時に非表示の文字なので、次のようになります。

string certThumbPrint = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";

実際には

文字列certThumbPrintは"= INVISIBLECHARACTERのfe14593dd66b2406c5269d742d04b6e1ab03adb1を"。

この非表示の文字を削除するか(バックスペースを押すか、横に削除すると何も起こらないように見えます)、または手で拇印を再入力すると、コードは正常に機能するはずです。VisualStudioに「非表示の文字を表示する」オプションがある場合...


2
VSには[編集]> [詳細設定]> [空白の表示](Ctrl + R、Ctrl + Wで切り替え)があります-知っている場合は、何を探すか役立つ場合があります。
Michael Freidgeim 2013年

@MichaelFreidgeimそれは役に立ちません。VSは非表示文字を表示せず、スペース文字のみを表示します。
George Polevoy 2014年

@MichaelFreidgeim View White Spaceは、少なくともVS 2013では、これらの特定の非表示文字を表示しません。
ジェレミークック

私はまた、MMCからの選択とコピーに落ちました。
モッツ

3
聖なる@%$ @ $ !!! これは壮大です。無駄な時間、すぐにウィンドウで遊んで、なぜ「Foo」== "Foo"が間違っていたのか疑問に思いました。あなた、サー、賛成に値する。ありがとうございました!
チアゴシルバ2016

18

拇印を含む文字列リテラルの先頭には、左から右のマークが付いています。MMCが証明書のプロパティを一覧表示する場合、拇印の値の前にこの文字が表示されるため、テキストが通常右から左にレンダリングされるロケールでも、16進バイトが左から右に一覧表示されます。

おそらく、これは誰かが取ったショートカットでした。編集コントロールのスタイルを動的に更新するコードを書くよりも、プロパティリストの値の1つに文字を追加する方が簡単だったからです。おそらく、ローカリゼーションテスト中のバグレポートの迅速な修正でした。

MMCでは、左から右へのマークの幅がゼロではありません。カーソルがカーソルを横切って矢印で移動するのを見ると、16進バイトの最初の行が右にわずかにシフトしていることがわかります。 2行目。

Visual Studioなどの他のエディターでは、左から右へのマークに幅はありませんが、矢印を横切ったときにカーソルが移動しないことに注意することで、幅を確認できます。KenDが答えたように、この文字を削除すると問題が解決します。

非表示の文字をすばやく識別する方法:キーボードを使用して非表示の文字を選択します。次に、Wordの通常の文字の間に貼り付けます。Wordで選択します。次に、[挿入]> [シンボル]> [その他のシンボル]をクリックします。左下の「Unicode名」を見てください。


10

これらのLTR "\ u200e"およびRTL "\ u200f"文字が拇印文字列から確実に削除されるようにするには、次の手順を実行します。

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

空白を削除するための最後の文字列置換は、証明書の有無にかかわらず証明書を検出するため、完全に必要というわけではありません。

他の厄介なUnicode文字はここにあります

UTF-8エンコーディングテーブルとUnicode文字


5

私の2セント:MMCで値をコピーし、空白を有効にしてVSに貼り付けました。

最初は何もありませんでしたが、最後にスペースがありました: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

ここで、web.configファイルに、内部のすべてのスペースを維持しながら値を貼り付け、最後のスペースを削除しました: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e57"

これは正常に機能します。

「1e52730d0029e6857be623e2fac7a508ac365e57」を使用すると、他の投稿にあるように内部のスペースを削除しても機能しません...

これが役立つことを願っています;)


2

このPowerShellスクリプトを実行してすべての拇印を取得し、出力をテキストファイルにリダイレクトして、そこから拇印をコピーします。

Get-ChildItem -path cert:\LocalMachine\My

テキストファイルへの出力にリダイレクトするには、次を使用します。

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

これありがとう!私はすでに証明書を持っていて、それを知りませんでした。これは私が知る必要があることを明らかにしました。
rjacobsen0

2

余分な文字を削除し、有効な16進数(およびToUpper it)以外のものを削除するために、次のことを行いました。

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

これにより、証明書マネージャーダイアログから直接拇印をコピーして、使用状況に直接貼り付けることができました。


0

証明書のすべての証明書を取得し、拇印IDを出力するコンソールアプリケーションを作成することで、問題を解決することができました。コンソール出力をコピーして、拇印を正確に挿入しました。問題ありません。データが類似しているように見えても、MMCコンソールからコピーすると問題が発生するようです。私はこのサイトをすべての証明書を読むための出発点として使用しました。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.