Что веб-разработчикам следует знать о SSL

c2070ca3378d47869fee9ec58049adc7.jpg

В нашем блоге на Хабре мы пишем о развитии облачного сервиса 1cloud (по ссылке можно найти список статей о наших разработках). Также мы рассматриваем интересные вопросы, связанные с технологиями для создания ИТ-проектов. Ранее мы уже рассказывали о масштабировании приложений на Ruby, ускорении загрузки страниц и борьбе с DDoS-атаками с помощью NGINX.

Сегодня речь пойдет о еще об одной важной для любого веб-разработчика теме — работе с SSL. Команда проекта CertSimple в своем блоге опубликовала материал с разбором часто встречающихся вопросов по использованию этой технологии. Мы выбрали основные моменты этой статьи.

В 2015 году веб-разработчики получили о SSL информации больше, чем когда бы то ни было. Если вы регулярно читаете ресурсы, вроде Hack News, то вы, наверное, уже в курсе, что:

  • Вы можете получить сертификат с проверкой домена (Domain Validated, VD) через Let«s Encrypt бесплатно.
  • Вы можете получить сертификат с «расширенной проверкой» (Extended Validation, EX) с возможностью тестового использования перед покупкой от CertSimple (https://certsimple.com/about).
  • Приложение Mozilla SSL Config Generator позволяет максимально обезопасить ваш сервер для любых браузеров, которыми вы пользуетесь.
  • Если все сделано, сертификат получен, вы можете отслеживать безопасность своего сайта через SSL Labs.


Это для начала. Теперь поговорим об ответах на некоторые часто задаваемые вопросы.

Как исправить устаревший алгоритм аутентификации (cipher suite) в Chrome


Это самый распространенный вопрос, поскольку в SSL Lab, это состояние не отражается. Если Chrome выдает следующее:

connection is encrypted using an obsolete cipher suite

Прописывайте в настройках конфига GCM-шифры перед клиентскими шифрами CBC.

Есть более простой вариант: Mozilla SSL Config Generator показывает оптимальные настройки файла для большинства веб-серверов. Обновите свой конфиг, перезапустите веб-сервер, и проблема решена.

Как устранить несоответствия ключа и сертификата


Если вы:

  • поменяли кодировку;
  • обновили сертификат;
  • потеряли свой приватный ключ и сделали дубликат.


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

Error: Public Key Certificate and Private Key doesn't match

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

Для того чтобы выяснить, соответствует ли файл сертификата приватному ключу, проверьте его modulus:

# Check the modulus of a certificate
openssl x509 -noout -modulus -in example.com.crt | shasum -a 256

# Check the modulus of a key
openssl rsa -noout -modulus -in example.com.key | shasum -a 256

# Check the modulus of a certificate request
openssl req -noout -modulus -in example.com.csr | shasum -a 256


Если modulus одинаков, то и приватный ключ совпадает с сертификатом. То есть они принадлежат одной паре. Если modulus разный, значит, файлы созданы независимо и не являются частью одной пары.

Установка работы SSL в localhost


Пользуетесь геолокацией? WebTLC? В таком случае ваш браузер нуждается в SSL для чувствительных к проблемам безопасности особенностей HTML5.

Если появляется ошибка invalid https:// setup on localhost, вы потратите кучу времени на сворачивание окна предупреждения SSL.

Хорошая новость в том, что беспокоиться не о чем. Установка доверенного localhost setup на ваш Mac займет всего пару минут. Инструкции прилагаются.

У вас нет желания получать 4096-битный RSA сертификат


1024-битный RSA признан небезопасным. Практически каждый сайт сегодня в сети использует его 2048-битную версию. Так почему бы не сделать следующий шаг и не перейти к 4096-битному RSA сертификату?

Проблема в том, что дополнительная нагрузка замедлит обмен данными между браузером и вашим сайтом. Вы можете оценить потери с помощью инструмента Chrome DevTools.

Кроме того, как отметил в Hacker News Джофри Томас, ваш промежуточный CA сертификат, вероятней всего, будет 2048-битный RSA. Если вы считаете его недостаточно крепкой защитой, знайте, что промежуточный 2048-битный CA сертификат все еще может быть взломан и использован для подделки сертификата вашей организации.

Если у вас паранойя по поводу надежности, попробуйте сертификат ECDSA вместо RSA. Он определенно надежней и меньше перегружают процессор, чем RSA: 256-битный ECC ключ эквивалентен 3072-битному RSA.

Сегодня с ECC работают браузеры от Windows Vista и выше, OS X 10.9, Android 3 и iOS7. Основная проблема пока с облачными провайдерами: Heroku и AWS CloudFront до сих пор его не поддерживают.

Как конвертировать основные SSL-форматы


Существует множество форматов, подходящих для PKI и SSL, но в основном серверный софт сейчас использует два из них: PEM

  • Этот формат используют haproxy, nginx, Apache, node, то есть все, где фигурирует openssl.
  • Это текстовые формат. Ключи, сертификаты, CA сертификаты используют форму -----BEGIN (TYPE)----- и -----END (TYPE)-----.
  • Обычно это прописано в разных файлах, но легко может быть сведено в один. Можете скопировать их в тот же файл, можете разделить в разные текстовым редактором.


PKCS12
Это двоичный формат, используемый Windows и Tomcat (в конфигурации по умолчанию), с расширением pfx или p12.

Он объединяет приватные ключи, сертификаты, промежуточные сертификаты в один файл.

Вы можете легко менять один формат на другой:

# Convert PEM to PKCS12
openssl pkcs12 -export -inkey privatekey.pem -in cert.pem -certfile cacert.pem -out bundle.p12

# Convert PKCS12 file to PEM
# (you can then chop the files up with a text editor)
openssl pkcs12 -nodes -in bundle.p12 -out bundle.pem


На сегодня все, спасиб за внимание! Не забывайте подписываться на наш блог.

© Habrahabr.ru