Как клиент SSL может проверить сертификат сервера? - PullRequest
1 голос
/ 03 января 2009

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

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

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

Ответы [ 3 ]

5 голосов
/ 03 января 2009

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

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

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

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

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

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

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

0 голосов
/ 02 марта 2017

Я не понимаю, как мне защитить сертификат сервера.

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

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

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

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

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

0 голосов
/ 03 января 2009

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

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

...