Назад | Перейти на главную страницу

Как сделать сертификаты 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
Private key directory:
C:\Documents and Settings\MYUSER\Application Data\Microsoft\Crypto\RSA\S--5-21-2205538328-2105125954-533649117-1053
Private key file name:
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"
 Everyone: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, пытаясь использовать сервис

Exception: System.InvalidOperationException 
Message: Cannot find the X.509 certificate using the following search criteria: StoreName 'TrustedPeople', StoreLocation 'CurrentUser', FindType 'FindByThumbprint', FindValue 'b33e04f057a52cb73007aec81eee86d2f75e3c69'. 
Source: System.ServiceModel 
at System.ServiceModel.Security.SecurityUtils

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

ОБНОВИТЬ

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

Чтобы решить эту проблему, сначала нужно знать, что исправить.

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

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

    1. Перейдите в Панель управления -> Администрирование -> Локальная политика безопасности (gpedit)
    2. Развернуть Computer Configuration \ Windows Settings \ Security Settings \ Local Policies и выберите Audit Policy
    3. Дважды щелкните значок Audit Object Access политика
    4. Убедитесь, что Define these policy settings и Success флажки отмечены.
    5. Примените это изменение, и теперь включен аудит успешных попыток доступа к объектам.

  2. Добавить запись аудита для закрытого ключа

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

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

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

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