2009-03-10 2 views
1

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

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

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

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

Благодарим за помощь в решении этой проблемы.

ответ

1

Источник: Least Privilege

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

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

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

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

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

См. Ссылку для получения более подробной информации, надеюсь, это поможет!

+0

Для управляемых пользовательских действий я бы сказал, это зависит. Если вы устанавливаете приложение .net, у которого уже есть условие запуска, требующее рамки .net, вы будете в порядке. Мы используем управляемые пользовательские действия C++ в WiX в течение 2 лет и переходим к их новым пользовательским действиям DTF C#, никогда не возникавших проблем. –

+0

@Rob: Я знаю, что управляемые пользовательские действия на самом деле могут работать ... но они не поддерживаются. Роб Меншинг (ведущий член команды WiX) сделал сообщение в блоге, объясняющее, почему это не поддерживается: http://robmensching.com/blog/posts/2007/4/19/Managed-Code-CustomActions-no-support- on-the-way-and-heres –

+0

@Jeroen: пользовательские действия DTF не подпадают под технические ограничения, отмеченные в сообщении Роба, главным образом потому, что они выполняются в отдельном процессе. Последние версии WIX включают типы проектов DTF. –

0

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

+0

Спасибо, что ответили, Sacha. Нет, его не нужно устанавливать. –

0

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

Смежные вопросы