Изменение безопасности на установленных сертификатах - PullRequest
1 голос
/ 10 марта 2009

Мы работаем над созданием установочного пакета для веб-службы на основе WCF. Сервис использует шифрование на уровне сообщений через установленный сертификат. Я пытаюсь найти автоматический способ установки сертификата и установки его разрешений.

В настоящее время мы вручную устанавливаем сертификат через оснастку MMC. После его установки нам нужно найти файл, содержащий установленный сертификат, и изменить разрешения, чтобы учетная запись сетевой службы могла получить к нему доступ. Единственный известный мне способ найти файл - открыть папку «... \ Microsoft \ Crypto \ RSA \ MachineKeys» (точный путь зависит от платформы) и определить файл с самой последней измененной датой.

Я думаю, что мы будем использовать WIX для создания установочного пакета. WIX имеет особую функцию для установки сертификата, но я предполагаю, что разрешения все равно будут проблемой. Существуют ли какие-либо утилиты, API или другие средства для получения физического пути для установленного сертификата, идентифицируемого по имени субъекта (или подобному).

Конечно, возможно, есть более прямое решение этой проблемы.

Спасибо за любую помощь в этом вопросе.

Ответы [ 3 ]

1 голос
/ 11 марта 2009

Источник: Наименее привилегия

Нет чистого способа сделать это в управляемом коде. Общая процедура:

  1. Выберите сертификат
  2. Создание объекта RSACryptoServiceProvider из свойства PrivateKey сертификата
  3. Получить свойство UniqueKeyContainerName.
  4. Поиск этого имени файла в различных местах, где хранятся ключи. Thats под ApplicationData для пользовательских ключей и CommonApplicationData для машинных ключей

Если вы хотите сделать это в пользовательском действии, я рекомендую вам сделать это в C ++. (Управляемые пользовательские действия в большинстве случаев не очень хорошая идея.)

Если вы хотите установить только ACL, есть два инструмента, которые могут сделать это за вас:

  • WinHttpCertCfg.exe
  • Инструмент сертификатов, включенный в WSE3

Подробности смотрите по ссылке, надеюсь, это поможет!

0 голосов
/ 11 марта 2009

Сам сертификат не имеет разрешений. Он может находиться в хранилище сертификатов пользователя, например в хранилищах MY, CA или ROOT. Или это может быть в компьютерной версии этих магазинов. Похоже, вы также устанавливаете закрытый ключ вместе с сертификатом. Чтобы сделать личный ключ доступным для службы, он должен быть установлен в хранилище ключей компьютера. Если вы выполняете импорт вручную через что-то вроде CryptImportKey, вы должны указать CRYPT_MACHINE_KEYSET при получении контейнера ключей с помощью CryptAcquireContext.

0 голосов
/ 11 марта 2009

Нужно ли устанавливать сертификат? Не могли бы вы сослаться на него из файла PFX или аналогичного, вместо этого, отрицая необходимость установки?

...