Как сделать сертификаты X.509 доступными для WCF

Вопрос или проблема

Я следовал инструкциям здесь

http://msdn.microsoft.com/en-us/library/aa702621.aspx

Я использую Windows 2003 с IIS6 с отдельной учетной записью пользователя для пула приложений. Я предоставил этому пользователю доступ к закрытому ключу с помощью cacls.exe. Это работает нормально.

Однако, всякий раз, когда что-то изменяется на сайте ASP.NET или в IIS, разрешения теряются. Например, если я изменяю файл web.config, перезапускаю IIS, жду 5 часов, затем вызов сертификата SSL не удается, и я больше не могу получить к нему доступ со своего клиента, который пытается использовать WFC-сервис. Я выполняю вход под учетной записью APP POOL, снова запускаю cacls.exe, и это решает проблему.

Как мне исправить это навсегда, так как в данный момент это останавливается каждые 5 часов?

Обновление

На самом деле, я шагнул назад. Теперь я не могу заставить это работать вообще. Вот шаги, которые я выполняю

C:\FindPrivateKey>FindPrivateKey.exe Trustedpeople currentuser
Директорий закрытого ключа:
C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S--5-21-2205538328-2105125954-533649117-1053
Имя файла закрытого ключа:
ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1

Предоставить разрешения

Cacls.exe "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1" /E /G "WWWTEST2\MYUSER":R

Проверить разрешения

 Cacls.exe "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1"
 Все:R
 WWWTEST2\MYUSER:F

Установить владельца

subinacl /file "C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S-1-5-21-2205538328-2105125954-533649117-1053\ab715bc6d3b1ae3bdb1a9e8e21a3b851_817f45df-79ce-4f15-9345-15b5c81281a1" /setowner=WWWTEST2\MYUSER

Ошибка, которую я получаю от сайта ASP.NET, пытаясь использовать сервис

Исключение: System.InvalidOperationException 
Сообщение: Не удается найти сертификат X.509 с использованием следующих критериев поиска: StoreName 'TrustedPeople', StoreLocation 'CurrentUser', FindType 'FindByThumbprint', FindValue 'b33e04f057a52cb73007aec81eee86d2f75e3c69'. 
Источник: System.ServiceModel 
в System.ServiceModel.Security.SecurityUtils

Когда я вхожу под учетной записью MYUSER, которая запускает пул приложений IIS, и захожу в “mmc” для управления сертификатами, я вижу сертификат в своем пользовательском аккаунте в разделе TrustedPeople.

ОБНОВЛЕНИЕ

Мне удалось заставить это работать, установив сертификат на Локальном компьютере / Личном и использовав winhttpcertcfg вместо cacls.

Для решения данной проблемы вам сначала нужно понять, что исправить.

Чтобы определить, что вызывает изменения DACL закрытых ключей, включите аудит доступа к объектам и добавьте аудиторскую запись на изменения разрешений для закрытого ключа, применяя Everyone. Для этого выполните следующие простые шаги.

  1. Включите аудит доступа к объектам

    1. Перейдите в Панель управления -> Администртивные инструменты -> Локальная политика безопасности (gpedit)
    2. Разверните Конфигурацию компьютера \ Настройки Windows \ Настройки безопасности \ Локальные политики и выберите Политика аудита
    3. Дважды щелкните на политике Аудит доступа к объектам
    4. Убедитесь, что отмечены поля Определить эти настройки политики и Успех.
    5. Примените это изменение, и успешный аудит попыток доступа к объектам теперь включен.
  2. Добавьте запись аудита для закрытого ключа

    1. Перейдите в C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
    2. Щелкните правой кнопкой мыши на закрытом ключе, выберите Свойства
    3. На вкладке Безопасность выберите Дополнительно
    4. Выберите вкладку Аудит и добавьте запись для группы Everyone.
    5. Отметьте поля Изменить разрешения

Как только разрешения будут казаться “сброшенными”:

  1. Проверьте журнал безопасности
    1. Перейдите в Панель управления -> Административные инструменты -> Просмотр событий (eventvwr)
    2. Выберите журнал безопасности
    3. Отфильтруйте журнал по ID события: 567
    4. Ищите “WRITE_DAC

Разрешение WRITE_DAC — это разрешение на изменение DACL. Когда это разрешение применяется к объекту, будет записано событие с ID 567, при условии, что объект находится под аудитом. Таким образом, вы сможете определить, какой процесс изменил установленные вами разрешения.

Ответ или решение

Для решения проблемы с доступом к сертификатам X.509 в WCF, которая возникает из-за потери прав доступа к закрытым ключам, необходимо выполнить ряд шагов по обеспечению постоянного доступа. Эти шаги помогут сохранить права доступа, даже когда происходят изменения в IIS или дополнительных конфигурациях ASP.NET.

Шаг 1: Включение аудита доступа к объектам

Для начала вам необходимо включить аудит доступа к объектам, чтобы отслеживать, какие процессы изменяют DACL (Discretionary Access Control List) закрытого ключа.

  1. Откройте Панель управления -> Административные инструменты -> Локальная политика безопасности.
  2. Разверните Конфигурация компьютера \ Настройки Windows \ Безопасность \ Локальные политики и выберите Политика аудита.
  3. Дважды щелкните на Аудит доступа к объектам.
  4. Убедитесь, что отмечены параметры Настроить эти параметры политики и Успех.
  5. Примените изменения.

Шаг 2: Добавление аудиторской записи для закрытого ключа

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

  1. Перейдите к каталогу C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\.
  2. Щелкните правой кнопкой мыши на нужном закрытом ключе и выберите Свойства.
  3. На вкладке Безопасность выберите Дополнительно.
  4. Перейдите на вкладку Аудит и добавьте запись для группы Everyone.
  5. Убедитесь, что отмечены флажки для Изменение разрешений.

Шаг 3: Проверка журнала безопасности

После настроек аудита, когда права доступа будут "сбрасываться", вы сможете узнать, что произошло:

  1. Откройте Панель управления -> Административные инструменты -> Просмотр событий.
  2. Перейдите в журнал Безопасность и отфильтруйте журнал по ID события: 567.
  3. Ищите события, связанные с WRITE_DAC. Это событие фиксирует изменения в DACL объекта.

Шаг 4: Установка сертификатов на уровне локальной машины

Если доступ к сертификату по-прежнему не стабильный, рекомендуем установить сертификат на уровень локальной машины, а не на уровень текущего пользователя. Это поможет избежать потери доступа к сертификатам в будущем. Используйте утилиту winhttpcertcfg для управления доступом:

winhttpcertcfg -g -i "имя_вашего_сертификата" -s "открытый_ключ" -c "ссылка на локальную машину" -a "имя_пользователя_пула_приложений" -p "ставим_права"

Заключение

Следуя этим шагам, вы сможете сделать сертификаты X.509 доступными для приложения WCF и сохранить их доступность при изменениях в IIS или конфигурациях. Аудит доступа к объектам поможет понять, какие операции изменяют права доступа к закрытым ключам. Убедитесь, что у вас есть резервная копия всех настроек перед внесением изменений, чтобы избежать потенциальных проблем.

Оцените материал
Добавить комментарий

Капча загружается...