- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

connection is encrypted using an obsolete cipher suite

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

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

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

Если вы:

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

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

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 [11].

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

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

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

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

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

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

Если у вас паранойя по поводу надежности, попробуйте сертификат 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

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

Автор: 1cloud.ru

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/109204

Ссылки в тексте:

[1] Image: http://habrahabr.ru/company/1cloud/blog/275335/

[2] 1cloud: http://1cloud.ru/

[3] по ссылке: http://habrahabr.ru/company/1cloud/blog/268547/

[4] масштабировании: http://habrahabr.ru/company/1cloud/blog/272471/

[5] ускорении загрузки: http://habrahabr.ru/company/1cloud/blog/268461/

[6] материал: http://habrahabr.ru/company/1cloud/blog/275107/

[7] Let’s Encrypt: http://letsencrypt.org/

[8] расширенной проверкой: https://certsimple.com/blog/are-ev-ssl-certificates-worth-it

[9] Mozilla SSL Config Generator: https://mozilla.github.io/server-side-tls/ssl-config-generator/

[10] SSL Labs: https://www.ssllabs.com/ssltest/

[11] особенностей HTML5: https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins

[12] прилагаются: https://certsimple.com/blog/localhost-ssl-fix

[13] инструмента: https://certsimple.com/blog/measuring-ssl-rsa-keys

[14] Джофри Томас: https://twitter.com/geofft

[15] может быть взломан: https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning

[16] наш блог: http://habrahabr.ru/company/1cloud/blog/

[17] Источник: http://habrahabr.ru/post/275335/