Не удается найти уникальный сертификат, который соответствует критериям - PullRequest
22 голосов
/ 14 июля 2010

Я сталкиваюсь со следующей ошибкой при попытке разобрать мой токен:

Property name: 'certificateReference'
Error: 'ID1025: Cannot find a unique certificate that matches the criteria.
StoreName: 'My'
StoreLocation: 'LocalMachine'
X509FindType: 'FindByThumbprint'
FindValue: '‎41a8a59e537d4a00a8c4fa8dc2522388dbd13d27'

В моем файле web.config есть раздел:

<serviceCertificate>`
    <certificateReference x509FindType="FindByThumbprint" findValue="‎41A8A59E537D4A00A8C4FA8DC2522388DBD13D27" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>

Я подтвердил, что сертификат существуетв IIS, MMC и Internet Explorer и попытались изменить тип поиска на тему безрезультатно.Я также пробовал, чтобы отпечаток был прописным, строчным, с пробелами и без пробелов.Я также подтвердил, что сертификат существует LocalMachine \ My со следующими результатами:

Matching certificate:
CN=kelly-pc

Дополнительные учетные записи и группы с доступом к закрытому ключу включают:

NT AUTHORITY\SYSTEM
BUILTIN\Administrators
KELLY-PC\Kelly
BUILTIN\IIS_IUSRS

Ответы [ 6 ]

23 голосов
/ 17 июля 2013

У меня была точно такая же проблема. Скопировав мой раздел web.config в Notepad ++ (не в блокноте), я увидел невидимый символ:

<serviceCertificate>
        <certificateReference  x509FindType="FindByThumbprint" findValue="?e36df2f3e351a25adf8ffb6ad3619f10238f0317" />
</serviceCertificate>

Удалите этот символ, и он должен работать.

Без Notepad ++ вы можете просто нажать клавишу Backspace перед значением отпечатка пальца (пытаясь удалить «char.

»).
8 голосов
/ 26 июня 2013

Во-первых, совет Олега «ToTenAuthentication» не работал для меня, так как мое приложение - asp.net MVC.Я предполагаю, что этот элемент не поддерживается в приложении asp.net MVC, но он может поддерживаться в конфигурации службы WCF.

После многих часов борьбы с этой ошибкой на локальном хосте и другими ошибками, такими как ID1024, мне пришлосьотмените некоторые вещи, которые я сделал, следуя совету, например, дав всем прочитать все файлы в% ALLUSERSPROFILE% \ Microsoft \ Crypto \ RSA \ MachineKeys согласно этому блогу (я предоставил чтение для всей папки MachineKeys, которая былане хорошая идея!).После этого все предоставление закрытых ключей перестало работать через консоль MMC!

Мое решение состояло в том, чтобы создать новый самозаверяющий сертификат в соответствии с инструкциями из здесь

Затем ясделал новый импорт вновь созданного сертификата в правильное хранилище и дал пользователю, который запускает веб-приложения, права на чтение закрытого ключа.Моя проблема была с сертификатом, который я использовал до того, который был самозаверяющим, должно быть, с ним что-то не так ..

Этот раздел определенно требовался на стороне клиента:

<serviceCertificate>
   <certificateReference x509FindType="FindByThumbprint" findValue="‎41A8A59E537D4A00A8C4FA8DC2522388DBD13D27" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>

При работе с сертификатами это также очень хороший совет:

ЕСЛИ ВЫ ВПЕРВЫЕ ИМПОРТИРУЕТЕ СЕРТИФИКАТ В ЛИЧНЫЙ МАГАЗИН ДЛЯ РАЗРАБОТКИ, ЗАВЕРШАЕТЕ ЭТО В МАШИННЫЙ МАГАЗИН ДЛЯ РАЗВЕРТЫВАНИЯ, ЧАСТНЫЙ КЛЮЧ ОСТАЕТСЯВ ЛИЧНОМ МАГАЗИНЕ МАГАЗИНА, ТАК ЧТО СЛУЖБА СЧЕТА НЕ МОЖЕТ ИСПОЛЬЗОВАТЬ ЕГО ДАЖЕ, ЧЕМ ОНИ БЫЛИ ПРЕДОСТАВЛЕНЫ РАЗРЕШЕНИЕ.

И, наконец, инструмент FindPrivateKey.exe оказался очень удобным, чтобы найти фактический файл личного ключа и помочь решитьпроблема, это можно скачать с здесь , с хорошими инструкциями здесь .

Я заметил, что при удалении сертификатов через консоль MMC мне пришлось вручную удалить файл закрытого ключа из

C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys

, еслиудаление из локального хранилища и из

C: \ Users [Имя пользователя] \ AppData \ Roaming \ Microsoft \ Crypto \ RSA \ S-1-5-21-2106337540-114255811-1274951907-65121

при удалении из хранилища CurrentUser

3 голосов
/ 18 декабря 2013

Это был невидимый персонаж перед отпечатком пальца для меня тоже. Стандартная инструкция Microsoft для получения отпечатка - открыть свойства сертификата, скопировать строку шестнадцатеричных байтов и удалить пробелы между ними. Я предполагаю, что эта процедура копирования добавляет некоторые невидимые символы в начало строки. Эти символы также должны быть удалены, или отпечатки пальцев не совпадают. Я понял, что с отпечатком должно быть что-то не так, когда я обнаружил, что могу загрузить сертификат по его имени.

1 голос
/ 14 июля 2010

Возможно, вы используете самостоятельно выданный сертификат, и вам следует добавить также строку

<issuedTokenAuthentication allowUntrustedRsaIssuers="true" />

внутри <serviceCertificate>, который следует использовать вместе с <certificateReference>.

0 голосов
/ 19 апреля 2017

На одном конкретном сервере мне пришлось добавить его в хранилище Trusted Root Certification Authorities, а также в Personal для того, чтобы код его распознал.

На моем локальном компьютере и других серверах он работал нормальноТолько в личном магазине.

0 голосов
/ 12 июня 2015

Итак, эта ошибка появилась на моем экране сегодня утром. Я использую машину для разработки, поэтому я использовал самозаверяющий сертификат (IIS). После установки Visual Studio 2015 RC IIS также был обновлен. Оказывается, это нарушило цепочку доверия, поскольку корневой сертификат был удален или недействителен (IIS Express.

Возможно, это очевидная вещь, но убедитесь, что выбранный сертификат все еще действителен, включая каждый переход в цепочке.

...