Подтвердить что ты не робот

Не удается найти уникальный сертификат, соответствующий критериям

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

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
4b9b3361

Ответ 1

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

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

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

Без Notepad ++ вы можете просто нажать backspace перед значением отпечатка (попытка удалить "char.

Ответ 2

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

После многих часов борьбы с этой ошибкой на localhost и других ошибок, таких как 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

если удаление из localMachine store и из

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

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

Ответ 3

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

Ответ 4

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

<issuedTokenAuthentication allowUntrustedRsaIssuers="true" />

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

Ответ 5

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

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

Ответ 6

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

В моем локальном поле и других серверах он работал только в личном хранилище.