Вопрос

Я создаю приложение и планирую использовать OpenSSL для обеспечения безопасности передачи данных.

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

Каковы некоторые из распространенных практик, которым следуют приложения, использующие SSL?

Это было полезно?

Решение

Просто чтобы убедиться, что мы правильно понимаем нашу терминологию, "SSL-сертификат" в просторечии на самом деле состоит из двух компонентов:

  • Публичный сертификат
  • Закрытый ключ

Компонент общедоступного сертификата подписывается выбранным вами центром сертификации (certificate authority), после чего его можно свободно распространять.Его не нужно защищать или шифровать, и действительно, он будет отправлен клиентам, которые подключаются к вашему серверу в рамках согласования SSL.

Компонент закрытого ключа должен быть защищен.В большинстве случаев это просто сохраняется в виде зашифрованного файла на сервере.Высококлассные решения используют специальное "защищенное от несанкционированного доступа" криптооборудование (HSM - аппаратные модули безопасности) для хранения закрытого ключа.Они варьируются от решений на основе смарт-карт до многоключевых сетевых устройств с управлением m / n и т.д.Существуют риски (не говоря уже о затратах), связанные с HSM, в которые я не буду здесь вдаваться.

Многие приложения просто сохраняют закрытый ключ на диске.Существует несколько вариантов защиты файла ключа:

  • Полагайтесь на безопасность системы и прав доступа к файлам (т.е. не шифруйте закрытый ключ).Например, большинство ssh-демонов делают это.
  • Используйте любой механизм, предоставляемый вашим сервером, для шифрования файла - защищенное паролем шифрование является стандартной функцией на большинстве веб-серверов.(Если вы создаете свой собственный, используя OpenSSL API, выберите один из очевидных форматов собственных ключей).

Как всегда, существует компромисс в плане безопасности.В частности, если вы используете защищенное паролем шифрование файла закрытого ключа и у вас происходит неожиданный перезапуск приложения (например, отключение питания), то кто-то должен быть доступен, чтобы предоставить пароль приложению при его перезапуске.Хранение пароля в файле, который считывается сценариями инициализации системы (как рекомендуется по крайней мере двумя поставщиками веб-серверов), мало что добавляет с точки зрения реальной безопасности.Трудно рекомендовать оставлять файл закрытого ключа незашифрованным, но если вы являетесь единственным администратором / техническим специалистом в небольшом магазине, вам определенно следует подумать о том, что может произойти, если сервер перезагрузится, когда вы будете недоступны, и каковы могут быть издержки для вашего бизнеса.

Другие советы

не совсем понимаю, о чем вы пытаетесь спросить.сертификат сервера отправляется вам, клиенту;вы подтверждаете сертификат, проверяя его подпись (используйте SHA-1, а не MD5, MD5 был взломан.) Ключ, полученный от центра сертификации, является общедоступным;центр сертификации и владелец сертификата сервера хранят свои закрытые ключи при себе.Вы можете подтвердить сертификат, потому что открытого ключа достаточно, чтобы расшифровать сообщение, которое было зашифрованный с помощью закрытого ключа.Таким образом, вам вообще не нужно беспокоиться о том, чтобы сохранить сертификат в зашифрованном виде.

Взгляните на Статья в Википедии о SSL /TLS.

Я в замешательстве относительно того, как я должен защитить сертификат сервера.

Вам не нужно защищать сертификат сервера.Это общедоступный документ

Я хотел бы зашифровать сертификат сервера, содержащий закрытый ключ

Сертификат сервера не содержит закрытого ключа.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top