CryptographicException «Набор ключей не существует», но только через WCF

The \ - возможно, не работал, потому что вы передали весь материал с сервера строкой. Если это так, сначала вы должны убежать \, поэтому серверная программа также может обрабатывать его.

  • В строке на стороне сервера: \\ -
  • На клиентская сторона: \ -
  • В регулярном выражении (обложки): -

Или вы можете просто положить в и [] скобки.

146
задан blowdart 2 March 2009 в 15:25
поделиться

4 ответа

Это, вероятно, будет проблема полномочий на сертификате.

При выполнении модульного теста Вы собираетесь быть казнью тех, которые под Вашим собственным пользовательским контекстом, который (в зависимости от того, в чем находится хранилище клиент сертификат) будет иметь доступ к закрытому ключу того сертификата.

Однако, если Ваш сервис WCF размещается под IIS, или как служба Windows, вероятно, что это будет работать под сервисной учетной записью (Сетевая служба, Локальная служба или некоторая другая ограниченная учетная запись).

необходимо будет установить соответствующие полномочия на закрытом ключе для предоставления того доступа сервисной учетной записи к нему. MSDN имеет детали

164
ответ дан blowdart 3 March 2009 в 01:25
поделиться

Ответ от Steve Sheldon решил проблему для меня, однако, поскольку я пишу сценарий полномочий сертификата с gui, мне было нужно scriptable решение. Я изо всех сил пытался найти, где мой закрытый ключ был сохранен. Закрытый ключ не был в -C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, в конечном счете я нашел, что это было на самом деле в C:\ProgramData\Microsoft\Crypto\Keys. Ниже я описываю, как я узнал это:

я попробовал FindPrivateKey, но это не могло найти, что закрытый ключ, и использующий powershell эти $cert.privatekey.cspkeycontainerinfo.uniquekeycontainername был пустым/пустым.

К счастью, certutil -store my перечислил сертификат и предоставил мне подробную информацию, я должен был написать сценарий решения.

================ Certificate 1 ================ Serial Number: 162f1b54fe78c7c8fa9df09 Issuer: CN=*.internal.xxxxxxx.net NotBefore: 23/08/2019 14:04 NotAfter: 23/02/2020 14:24 Subject: CN=*.xxxxxxxnet Signature matches Public Key Root Certificate: Subject matches Issuer Cert Hash(sha1): xxxxa5f0e9f0ac8b7dd634xx Key Container = {407EC7EF-8701-42BF-993F-CDEF8328DD} Unique container name: 8787033f8ccb5836115b87acb_ca96c65a-4b42-a145-eee62128a ##* ^-- filename for private key*## Provider = Microsoft Software Key Storage Provider Private key is NOT plain text exportable Encryption test passed CertUtil: -store command completed successfully.

я затем просканировал c\ProgramData\Microsoft\Crypto\ папка и нашел файл 8787033f8ccb5836115b87acb_ca96c65a-4b42-a145-eee62128a в [1 115] C:\ProgramData\Microsoft\Crypto\Keys.

Предоставление моего доступа для чтения сервисной учетной записи этот файл устранил проблемы для меня

1
ответ дан 23 November 2019 в 22:12
поделиться

Прошлой ночью у меня была такая же проблема. Разрешения на закрытый ключ были установлены правильно, все было в порядке, кроме ошибки «Набор ключей не существует». В итоге оказалось, что сертификат сначала был импортирован в хранилище текущего пользователя, а затем перемещен в хранилище локального компьютера. Однако при этом не был перемещен закрытый ключ, который все еще находился в

C: \ Documents and setngs \ Administrator ...

вместо

C: \ Documents and setngs \ All users ...

Несмотря на то, что разрешения для ключа были установлены правильно, ASPNET не мог получить к нему доступ. Когда мы повторно импортировали сертификат и поместили закрытый ключ в ветку «Все пользователи», проблема исчезла.

38
ответ дан 23 November 2019 в 22:12
поделиться

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

  1. Пуск -> Выполнить -> MMC
  2. Файл -> Добавить / удалить оснастку
  3. Добавить оснастку сертификатов
  4. Выберите «Учетная запись компьютера», затем нажмите «Далее»
  5. Выберите «Локальный компьютер» (по умолчанию), затем нажмите «Готово»
  6. . На левой панели из корневого каталога консоли перейдите к Сертификаты (локальный компьютер) -> Личные -> Сертификаты
  7. Скорее всего, здесь будет ваш сертификат.
  8. Щелкните правой кнопкой мыши свой сертификат -> Все задачи -> Управление закрытыми ключами
  9. Задайте здесь настройки личного ключа.
269
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: