У меня есть некоторый код, который вызывает сторонний веб-сервис, защищенный с помощью сертификации X.509.
Если я вызываю код напрямую (с помощью модульного теста), он работает без проблем.
При развертывании этот код будет вызываться через службу WCF. Я добавил второй модульный тест, который вызывает службу WCF, однако это не удается с CryptographicException
сообщением, "Keyset does not exist"
когда я вызываю метод в сторонней веб-службе.
Я предполагаю, что это потому, что моя служба WCF будет пытаться вызвать стороннюю веб-службу, используя другого пользователя для себя.
Кто-нибудь может пролить дополнительный свет на эту проблему?
Это наиболее вероятно, потому что пользователь IIS не имеет доступа к закрытому ключу для вашего сертификата. Вы можете установить это, выполнив следующие действия ...
источник
У меня была та же проблема прошлой ночью. Права доступа к закрытому ключу были установлены правильно, все было нормально, за исключением ошибки «Набор ключей не существует». В итоге оказалось, что сертификат был сначала импортирован в хранилище текущего пользователя, а затем перемещен в хранилище локального компьютера. Однако - это не сдвинуло закрытый ключ, который все еще был в
C: \ Документы и расчеты \ Администратор ...
вместо того
C: \ Документы и расчеты \ Все пользователи ...
Хотя права доступа к ключу установлены правильно, ASPNET не может получить к нему доступ. Когда мы повторно импортировали сертификат, чтобы закрытый ключ был помещен в ветку Все пользователи, проблема исчезла.
источник
Чтобы решить «Keyset не существует» при просмотре из IIS: это может быть для частного разрешения
Чтобы просмотреть и дать разрешение:
Чтобы дать разрешение:
источник
Была такая же проблема при попытке запустить приложение WCF из Visual Studio. Решил это, запустив Visual Studio от имени администратора.
источник
Я сталкивался с этой проблемой, в моих сертификатах был закрытый ключ, но я получал эту ошибку ( «Набор ключей не существует» )
Причина. Ваш веб-сайт работает под учетной записью «Сетевые службы» или имеет меньше привилегий.
Решение . Измените удостоверение пула приложений на «Локальная система», перезагрузите IIS и проверьте снова. Если он начинает работать, это проблема с привилегиями / меньшими привилегиями, вы можете выдать себя за другого, а затем использовать другие учетные записи.
источник
Полностью расстраивающий, у меня была та же самая проблема и попробовал большинство вышеупомянутого. Экспортированный сертификат правильно имел разрешения на чтение файла
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
, однако, как оказалось, у него не было разрешения на папку. Добавил и все заработалоисточник
IISAPPPool\www.mywebsite.com
какое имя пользователя Windows для моего appool, и это сработало :-)У меня точно такая же проблема. Я использовал команду
Результат показывает, что закрытый ключ находится в папке c: \ ProgramData вместо C: \ Documents and урегулирования \ Все пользователи ..
Когда я удаляю ключ из папки c: \ ProgramData, снова выполнить команду findPrivatekey не удается. то есть. он не находит ключ.
Но если я найду тот же ключ, возвращенный предыдущей командой, я все равно смогу найти ключ в
C: \ Документы и расчеты \ Все пользователи ..
Насколько я понимаю, IIS или размещенный WCF не находят закрытый ключ в C: \ Documents and урегулирования \ Все пользователи ..
источник
Я получаю сообщение об ошибке: CryptographicException «Набор ключей не существует» при запуске приложения MVC.
Решение было: предоставить доступ к личным сертификатам учетной записи, под которой работает пул приложений. В моем случае это было добавить IIS_IUSRS, и выбор правильного местоположения решил эту проблему.
источник
Ответ от Стива Шелдона устранил проблему для меня, однако, поскольку я использую разрешения на сертификаты для сценариев без графического интерфейса, мне нужно было решение с возможностью создания сценариев. Я изо всех сил пытался найти, где хранится мой закрытый ключ. Закрытого ключа не было, в
-C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
конце концов я обнаружил, что он был на самом делеC:\ProgramData\Microsoft\Crypto\Keys
. Ниже я опишу, как я это узнал:Я пытался,
FindPrivateKey
но он не смог найти закрытый ключ, и с помощью powershell the$cert.privatekey.cspkeycontainerinfo.uniquekeycontainername
был пустым / пустым.К счастью,
certutil -store my
перечислил сертификат и дал мне детали, необходимые для написания сценария решения.Затем я отсканировал
c\ProgramData\Microsoft\Crypto\
папку и нашел файл 8787033f8ccb5836115b87acb_ca96c65a-4b42-a145-eee62128a в C: \ ProgramData \ Microsoft \ Crypto \ Keys .Предоставление моей учетной записи службы доступа к этому файлу устранило проблемы для меня
источник
Я нашел некоторую недостающую информацию, которая помогла мне получить мою службу WCF с безопасностью на уровне сообщений, за исключением «набора ключей не существует», с которым я продолжал сталкиваться, несмотря на предоставление разрешений всем ключам, сгенерированным из примеров в Интернете.
Наконец, я импортировал закрытый ключ в хранилище доверенных лиц на локальном компьютере, а затем предоставил закрытому ключу правильные разрешения.
Это заполнило пробелы для меня и, наконец, позволило мне реализовать службу WCF с безопасностью на уровне сообщений. Я строю WCF, который должен соответствовать требованиям HIPPA.
источник
Я просто переустановил свой сертификат на локальной машине, а затем он работает нормально
источник
Если вы используете ApplicationPoolIdentity для своего пула приложений, у вас могут возникнуть проблемы с указанием разрешения для этого «виртуального» пользователя в редакторе реестра (такого пользователя нет в системе).
Итак, используйте subinacl - инструмент командной строки, который позволяет устанавливать ACL реестра, или что-то вроде этого.
источник
Я просто хотел добавить ответ проверки здравомыслия. Я получал точно такую же ошибку даже после установки сертификатов в нужные хранилища на моих компьютерах и получения всех необходимых привилегий безопасности для клиента. Оказывается, я перепутал свой клиентский сертификат и мой сервисный сертификат. Если бы вы попробовали все вышеизложенное, я бы дважды проверил, что у вас есть эти два подряд. Как только я это сделал, мое приложение успешно вызвало веб-сервис. Опять же, просто проверка здравомыслия.
источник
Получил эту ошибку при использовании openAM Fedlet на IIS7
Изменение учетной записи пользователя для веб-сайта по умолчанию решило проблему. В идеале вы хотели бы, чтобы это была служебная учетная запись. Возможно, даже учетная запись IUSR. Предложите поискать методы отверждения IIS, чтобы полностью закрепить его.
источник
Я столкнулся с этим в своем проекте сервисной фабрики после того, как истек срок действия сертификата, который использовался для аутентификации на нашем хранилище ключей, и был повернут, что изменило отпечаток. Я получил эту ошибку, потому что я пропустил обновление отпечатка в файле applicationManifest.xml в этом блоке, который точно выполняет то, что предлагали другие ответы - для предоставления NETWORK SERVICE (как все мои exe-файлы, стандартные конфигурации для кластера Azure Service Fabric) для получить доступ к LOCALMACHINE \ MY сертификату местоположение магазина.
Обратите внимание на значение атрибута «X509FindValue».
источник
Это единственное решение, сработавшее для меня.
Ссылка 1
Ссылка 2
источник
источник