Я использую этот код, чтобы найти сертификат по отпечатку пальца. сертификат существует в диспетчере сертификатов в личном хранилище сертификатов, но этот код не находит этот сертификат.
Подскажите пожалуйста, где я не так делаю.
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
Рати
источник
источник
X509Store
реализует,IDisposable
поэтому его следует использовать сusing
оператором.Ответы:
Просто наткнулся на этот вопрос, когда искал в Google ту же проблему, и нашел здесь ответ : если, как и я, вы получили свой «исходный» отпечаток пальца из MMC, выделив его и скопировав его в буфер обмена, вы почти наверняка поймали невидимый символ в начале экрана, поэтому:
на самом деле
Если вы удалите этот невидимый символ (вы можете сказать, что он там, когда вы нажмете backspace или delete рядом с ним, и ничего не произойдет), или просто повторно наберете отпечаток пальца вручную, ваш код должен работать нормально. Если бы только в Visual Studio была опция «показывать невидимые символы» ...
источник
Строковый литерал, содержащий ваш отпечаток большого пальца, помечен слева направо. в начале . Когда MMC перечисляет свойства сертификата, он предшествует значению отпечатка с этим символом, так что шестнадцатеричные байты перечисляются слева направо даже в тех регионах, где текст обычно отображается справа налево.
Вероятно, это был ярлык, который кто-то использовал, потому что было проще добавить символ к одному из значений в списке свойств, чем написать небольшой код для динамического обновления стиля элемента управления редактированием. Возможно, это было быстрое исправление сообщения об ошибке во время тестирования локализации.
В MMC метка слева направо имеет ненулевую ширину, что вы можете наблюдать, наблюдая за перемещением курсора при перемещении по нему стрелки, и я заметил, что первая строка шестнадцатеричных байтов немного сдвинута вправо по сравнению с второй ряд.
В других редакторах, таких как Visual Studio, метка слева направо не имеет ширины, но вы все равно можете наблюдать ее, заметив, что курсор не перемещается, когда вы перемещаете стрелку. Как ответил КенД, удаление этого персонажа решает проблему.
Быстрый способ определения невидимого персонажа: используйте клавиатуру для выбора невидимого символа; затем вставьте его в Word между некоторыми обычными символами. Выделите его в Word; затем нажмите Вставить> Символ> Другие символы. Посмотрите в левом нижнем углу под «Unicode name».
источник
чтобы гарантировать, что эти символы LTR "\ u200e" и RTL "\ u200f" удалены из строки отпечатка, сделайте следующее
thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);
замена последней строки для удаления пробелов не является полностью необходимой, поскольку она находит мой сертификат с ними или без них.
другие вызывающие беспокойство символы Юникода можно найти здесь
Таблица кодировки UTF-8 и символы Unicode
источник
Мои два цента: я скопировал значение в 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 5e 57"
Это прекрасно работает.
Если я использую «1e52730d0029e6857be623e2fac7a508ac365e57», удаление внутреннего пространства, как я вижу в других сообщениях, не сработает ...
Надеюсь, это поможет;)
источник
Я запускаю этот сценарий PowerShell, чтобы получить все отпечатки пальцев, перенаправить вывод в текстовый файл и скопировать оттуда отпечаток.
Чтобы перенаправить вывод в текстовый файл, используйте это:
источник
Я сделал следующее, чтобы удалить лишний символ, а также удалить все, что не является допустимым шестнадцатеричным (и ToUpper его):
thumbprint = Regex.Replace(thumbprint.ToUpper(), @"[^0-9A-F]+", string.Empty);
Это позволило мне скопировать отпечаток пальца прямо из диалогового окна диспетчера сертификатов и вставить его прямо в свое использование.
источник
Мне удалось решить проблему, написав консольное приложение, которое извлекает все сертификаты сертификата и выводит идентификатор отпечатка пальца. Я скопировал вывод консоли и точно вставил отпечаток пальца. Без вопросов. Похоже, что копирование с консоли MMC вызывает проблемы, хотя данные выглядят одинаково. Я использовал этот сайт как отправную точку для чтения всех сертификатов.
https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx
источник