90

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

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

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

7 に答える 7

219

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

string certThumbPrint = " fe14593dd66b2406c5269d742d04b6e1ab03adb1";

実際には

string certThumbPrint = " <strong>INVISIBLECHARACTERfe14593dd66b2406c5269d742d04b6e1ab03adb1";

この目に見えない文字を削除するか (バックスペースを押すか、その横で削除しても何も起こらないように見えると、そこにあることがわかります)、または拇印を手で再入力するだけで、コードは正常に動作するはずです。今、Visual Studio だけに「見えない文字を表示する」オプションがあれば...

于 2013-02-13T11:40:23.047 に答える
18

拇印を含む文字列リテラルには、先頭に左から右へのマークがあります。MMC が証明書のプロパティを一覧表示するとき、拇印値の前にこの文字を付けて、テキストが通常は右から左に表示されるロケールでも、16 進バイトが左から右に表示されるようにします。

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

MMC では、左から右へのマークの幅はゼロではありません。これは、カーソルを横切るときにカーソルが移動するのを観察することで確認できます。16 進バイトの最初の行が、二列目。

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

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

于 2015-06-02T01:28:39.073 に答える
10

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

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

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

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

UTF-8 エンコード テーブルと Unicode 文字

于 2015-06-03T15:08:55.630 に答える
0

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

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

于 2016-03-08T20:33:41.567 に答える