Где хранить сертификат X509 для службы Windows? - PullRequest
3 голосов
/ 07 мая 2010

У меня есть служба Windows, которая обычно запускается с использованием учетной записи локальной системы (хотя в некоторых случаях она может использоваться как учетная запись определенного пользователя).

Служба использует WCF, связь защищена сертификатами X509.

Мой вопрос: где лучше всего хранить сертификат (и закрытый ключ)?

Если использование хранилища сертификатов является лучшим подходом, какой из них следует использовать, чтобы гарантировать, что только администраторы и служба могут получить доступ к закрытому ключу?

В качестве альтернативы, простым вариантом будет просто сохранить оба файла в виде файла PFX на диске и использовать списки ACL для обеспечения доступа к нему только администраторов и службы. Каковы плюсы и минусы этого подхода по сравнению с использованием хранилища сертификатов?

EDIT Чтобы уточнить, я использую C # с .NET Framework 3.5

1 Ответ

2 голосов
/ 07 мая 2010

Прежде всего, я рекомендую вам хранить сертификат в хранилище сертификатов с закрытым ключом, сохраненным как не экспортируемый. Теперь несколько аргументов.

Существуют различные способы сохранить на машине личный секрет или другую личную информацию. Самый старый способ - API LsaStorePrivateData и LsaRetrievePrivateData (см. http://msdn.microsoft.com/en-us/library/ms721818%28VS.85%29.aspx).. Он имеет ограничение на количество секретов, но все секреты можно разделить на локальные, глобальные и машинные.

Следующим способом является использование DPAPI (см. http://msdn.microsoft.com/en-us/library/ms995355.aspx): CryptProtectData и CryptUnprotectData в нашем случае.

Я добавляю ссылки на эти два способа, потому что вы хотите сравнить различные возможные способы, чтобы убедиться, что ваш путь лучше всего подходит для вашей задачи.

Я думаю, что самый важный вопрос, который вы должны задать, - это лучший способ защитить мой закрытый ключ? Я думаю, вам следует выбрать способ, который защитит ваш ключ для копирования . Поэтому я рекомендую вам использовать хранилище сертификатов. В хранилище сертификатов вы можете хранить закрытый ключ с пометкой не экспортируемый . Это главное преимущество на мой взгляд. Вы можете развернуть сертификат с соответствующим закрытым ключом различными способами. Убедитесь, что сохраненный на машине закрытый ключ не помечен как экспортируемый .

Использование файла PFX на диске не дает вам этого преимущества. Кроме того, либо ваш PFX не зашифрован, либо вы получаете проблему , в которой вам нужно сохранить пароль в файл PFX . Поэтому вы должны использовать DPAPI (CryptProtectData и CryptUnprotectData) или LSA API (LsaStorePrivateData и LsaRetrievePrivateData), и пароль можно экспортировать.

...