Вопрос или проблема
Я следовал инструкциям здесь
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
. Для этого выполните следующие простые шаги.
Включите аудит доступа к объектам
- Перейдите в Панель управления -> Администртивные инструменты -> Локальная политика безопасности (
gpedit
)- Разверните
Конфигурацию компьютера
\Настройки Windows
\Настройки безопасности
\Локальные политики
и выберитеПолитика аудита
- Дважды щелкните на политике
Аудит доступа к объектам
- Убедитесь, что отмечены поля
Определить эти настройки политики
иУспех
.- Примените это изменение, и успешный аудит попыток доступа к объектам теперь включен.
Добавьте запись аудита для закрытого ключа
- Перейдите в
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
- Щелкните правой кнопкой мыши на закрытом ключе, выберите Свойства
- На вкладке Безопасность выберите Дополнительно
- Выберите вкладку Аудит и добавьте запись для группы Everyone.
- Отметьте поля Изменить разрешения
Как только разрешения будут казаться “сброшенными”:
- Проверьте журнал безопасности
- Перейдите в Панель управления -> Административные инструменты -> Просмотр событий (
eventvwr
)- Выберите журнал безопасности
- Отфильтруйте журнал по ID события: 567
- Ищите “WRITE_DAC“
Разрешение WRITE_DAC — это разрешение на изменение DACL. Когда это разрешение применяется к объекту, будет записано событие с ID 567, при условии, что объект находится под аудитом. Таким образом, вы сможете определить, какой процесс изменил установленные вами разрешения.
Ответ или решение
Для решения проблемы с доступом к сертификатам X.509 в WCF, которая возникает из-за потери прав доступа к закрытым ключам, необходимо выполнить ряд шагов по обеспечению постоянного доступа. Эти шаги помогут сохранить права доступа, даже когда происходят изменения в IIS или дополнительных конфигурациях ASP.NET.
Шаг 1: Включение аудита доступа к объектам
Для начала вам необходимо включить аудит доступа к объектам, чтобы отслеживать, какие процессы изменяют DACL (Discretionary Access Control List) закрытого ключа.
- Откройте Панель управления -> Административные инструменты -> Локальная политика безопасности.
- Разверните Конфигурация компьютера \ Настройки Windows \ Безопасность \ Локальные политики и выберите Политика аудита.
- Дважды щелкните на Аудит доступа к объектам.
- Убедитесь, что отмечены параметры Настроить эти параметры политики и Успех.
- Примените изменения.
Шаг 2: Добавление аудиторской записи для закрытого ключа
Теперь вам нужно добавить запись аудита для конкретного закрытого ключа:
- Перейдите к каталогу
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
. - Щелкните правой кнопкой мыши на нужном закрытом ключе и выберите Свойства.
- На вкладке Безопасность выберите Дополнительно.
- Перейдите на вкладку Аудит и добавьте запись для группы Everyone.
- Убедитесь, что отмечены флажки для Изменение разрешений.
Шаг 3: Проверка журнала безопасности
После настроек аудита, когда права доступа будут "сбрасываться", вы сможете узнать, что произошло:
- Откройте Панель управления -> Административные инструменты -> Просмотр событий.
- Перейдите в журнал Безопасность и отфильтруйте журнал по ID события: 567.
- Ищите события, связанные с WRITE_DAC. Это событие фиксирует изменения в DACL объекта.
Шаг 4: Установка сертификатов на уровне локальной машины
Если доступ к сертификату по-прежнему не стабильный, рекомендуем установить сертификат на уровень локальной машины, а не на уровень текущего пользователя. Это поможет избежать потери доступа к сертификатам в будущем. Используйте утилиту winhttpcertcfg для управления доступом:
winhttpcertcfg -g -i "имя_вашего_сертификата" -s "открытый_ключ" -c "ссылка на локальную машину" -a "имя_пользователя_пула_приложений" -p "ставим_права"
Заключение
Следуя этим шагам, вы сможете сделать сертификаты X.509 доступными для приложения WCF и сохранить их доступность при изменениях в IIS или конфигурациях. Аудит доступа к объектам поможет понять, какие операции изменяют права доступа к закрытым ключам. Убедитесь, что у вас есть резервная копия всех настроек перед внесением изменений, чтобы избежать потенциальных проблем.