Хранение сертификатов X509 в БД – да или нет?
-
05-07-2019 - |
Вопрос
Мне нужно хранить сертификаты открытого ключа и один сертификат закрытого ключа для собственного приложения.
Член нашей команды предложил хранить сертификаты X509 в базе данных, а не хранить их в хранилище сертификатов Windows, как мы делали до сих пор.Мне не нравится изобретать велосипед, но мне нужно хотя бы обдумать эту идею.это означало бы, что наши данные будут более централизованы, что, я полагаю, хорошо.
Первоначальные препятствия, которые я вижу, следующие:
- Закрытый ключ все равно нужно где-то хранить, и я не знаю, является ли хорошей идеей втиснуть его в таблицу «открытых ключей».Мне также не нравится идея создания таблицы для одного элемента.Возможно, просто сохраните закрытый ключ как локальный файл?(например, файл .pfx).
- Списки отзыва.Вероятно, нам придется настроить процесс для работы с отозванными открытыми ключами.
У меня нет большого опыта работы с сертификатами X509, поэтому мой вопрос:Есть ли какие-либо другие проблемы, с которыми мы можем столкнуться при хранении сертификатов открытых ключей в базе данных вместо использования хранилища сертификатов Windows?
Стоит иметь в виду, что это приложение будет развернуто на нескольких серверах бизнес-клиентов, поэтому хранение всех данных в одном месте упростит резервное копирование.Да, и рассматриваемое собственное приложение разрабатывается на C#..
Спасибо!
Решение
Какова цель вашего приложения?
Если вы обрабатываете все криптографические данные в своем приложении и можете ссылаться на файл сертификата PKCS#12 + секретный ключ, то, вероятно, использование маршрута к базе данных подойдет.
Если вам нужно использовать Windows Crypto API для доступа к сертификатам, вы, вероятно, захотите продолжать использовать встроенное хранилище сертификатов.Здесь вы получаете некоторые преимущества, поскольку можете защитить закрытый ключ на внешнем устройстве, например, на смарт-карте или аппаратном модуле безопасности (HSM).
Вам необходимо приложить значительные усилия для защиты закрытого ключа, если вы храните все на локальном диске.Обязательно используйте надежную парольную фразу и используйте лучшие практики для защиты этой парольной фразы в своем приложении.
Другие советы
Я бы не хотел перемещать закрытый ключ в какое-либо другое место, если это действительно не необходимо.Это не требуется, если ключ используется для подписи, и потребуется только в том случае, если ключ используется для расшифровки и вы хотите заархивировать его на будущее.Даже в этом случае центр сертификации, выдавший сертификат, обычно сможет выполнить архивирование и восстановление.Это, безусловно, относится к более популярным центрам сертификации, таким как Microsoft и Entrust.
Если вам необходимо сохранить его, зашифруйте его с помощью AES и ключа, который вы можете защитить либо в HSM (аппаратный модуль безопасности), либо на смарт-карте.Не оставляйте этот ключ в виде обычного текста (в файле или реестре).
Вы также хотели бы защитить этот ключ при передаче между местом его создания и центральной базой данных.SSL или VPN и т. д.
Списки отзыва публикуются центром сертификации в большинстве сред, обычно в LDAP или в каталоге, или в обоих.