SSL и SSL-сертификаты для новичков

vaspvort

Ночной дозор
Команда форума
Модератор
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
Private Club
Старожил
Migalki Club
Меценат💰️
Регистрация
10/4/18
Сообщения
5.570
Репутация
10.408
Реакции
16.381
RUB
1.045
Сделок через гаранта
18
2b6b93a58c5b669d6c9d8717d47556ba.jpg

Приятного чтения!

Secure Sockets Layer (SSL) и Transport Layer Security (TLS) - протоколы, обеспечивающие безопасное соединение в компьютерной сети. Обычно их используют при просмотре веб-сайтов, работы с электронной почтой.

В данном руководстве мы рассмотрим:

  • TLS и SSL;
  • публичные (public) и приватные (private) ключи;
  • для чего нам нужны сертификаты;
  • как получить цифровой сертификат (digital certificate);
  • как определить разницу между основными типами сертификатов.

Что такое TLS​

TLS, базой которого является SSL, разработан как его замена в ответ на известные уязвимости в SSLv3. Сегодня чаще всего термин SSL указывает именно на TLS.

Обеспечение безопасности​

SSL/TLS обеспечивает шифрование данных, целостность данных (data integrity) и аутентификацию. Это означает, что, используя SSL/TLS, вы можете быть уверены в том, что:

  • никто не прочитал ваше сообщение;
  • никто не изменил ваше сообщение;
  • вы взаимодействуете именно с тем человеком, с кем и планировали (прим.: вольный перевод intended person; гугл-транслейт предложил вариант "суженый", выбирайте то, что вам больше нравится).
Отправляя сообщение между двумя сторонами, вы сталкиваетесь с двумя проблемами, которые необходимо решить:

  • как убедиться в том, что никто не прочитал ваше сообщение?
  • как убедиться в том, что никто не изменил ваше сообщение?
Решением этих проблем будет:

  • зашифровать (encrypt) сообщение - сделать сообщение нечитаемым; любой, кто увидит это сообщение, будет видеть какую-то белиберду;
  • подписать (sign) сообщение - получатель сообщения сможет убедиться, что это именно ВЫ отправили ему сообщение, и сообщение не было изменено.
В этих двух процессах задействованы ключи. Ключи представляют собой просто числа (обычно 128-битные), которые с помощью определенного метода (алгоритма, например, RSA) комбинируются с содержанием сообщения, зашифровывая и\или подписывая его.

Симметричные ключи. Публичные и приватные ключи.​

Почти все методы шифрования, используемые сегодня, используют публичные и приватные ключи. Они считаются более безопасными в сравнении с более старым подходом с симметричными (symmetrical) ключами.

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

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

Использование такого типа ключей более безопасно и задействовано во всех современных системах шифрования и подписи.

Ключи и SSL сертификаты​

SSL/TLS использует публичный и приватный ключ для шифрования и контроля целостности данных.

Публичные ключи могут быть доступны для всех (что соответствует термину "публичный"). По этой причине возникает вопрос, можно ли доверять этому ключу - как узнать, что определенный публичный ключ действительно принадлежит определенному человеку или субъекту (entity)?

К примеру, вы получили некий ключ, "принадлежащий" вашему банку. Как можно узнать, что он действительно принадлежит банку? Ответ: использовать цифровой сертификат (digital certificate).

Сертификат служит той же цели, что и паспорт в повседневной жизни. Паспорт определяет связь между фотографией и человеком, и эта связь подтверждается удостоверяющим центром (trusted authority) - паспортным столом.

Цифровой сертификат определяет связь между публичным ключом и субъектом (например, доменом), который верифицируется (подписывается) доверенным третьим лицом - центром сертификации (ЦС) (certificate authority, CA).

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

Получение цифрового сертификата​

Получить цифровой сертификат можно у доверенного ЦС. Точно так же, как вы получаете паспорт в паспортном столе.

По факту, процедура очень даже похожа. Вы заполняете соответствующие формы, добавляете свои публичные ключи (просто числа) и отправляете их в ЦС - это называется запросом сертификата (certificate request). ЦС проводит ряд проверок (зависит от центра), и возвращает вам ваши ключи, "обёрнутые" в сертификат.

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

Пример использования​

Для иллюстрации всего выше описанного, давайте посмотрим, как происходит соединение между типичным браузером и сервером с использованием SSL (https). Такой тип соединения используется в Интернете для отправки писем через Gmail, онлайн-шоппинга, онлайн-банкинга и т.д.

  1. Браузер соединяется с сервером, используя SSL (https);
  2. Сервер присылает в ответ сертификат, содержащий публичный ключ этого веб-сервера.
  3. Браузер проверяет подпись сертификата, сверяя его с подписью доверенного центра. Для того, чтобы это сделать, сертификат доверенного центра должен хранится в trusted store браузера (об этом позже).
  4. Браузер использует публичный ключ, чтобы зашифровать сессионный ключ (session key) и отправляет его серверу.
  5. Браузер и сервер шифруют данные, передаваемые в соединение, этим сессионным ключом.

Типы цифровых сертификатов​

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

  • сертификат проверки домена (Domain-Validated (DV) Certificate)
  • сертификат с расширенной проверкой (Extended Validation (EV) Certificate).
Разница между этими двумя типами в степени доверия к сертификату, что заключается в более тщательной валидации. Уровень шифрования, которые они обеспечивают - одинаковый.

Сертификат проверки домена (DV) - это цифровой сертификат Х.509, обычно используемый в TLS, где подлинность субъекта потверждается путем доказательства наличия контроля над доменом. Процесс валидации обычно полностью автоматизирован, что делает такой сертификат наиболее дешевым. Они идеальны для сайтов, на которых не хранятся особо конфиденциальные данные.

Сертификат с расширенной проверкой (EV) - сертификат, используемый для HTTPS сайтов и ПО для подтверждения, что некое юридическое лицо управляет этим сайтом или ПО. Получение EV-сертификата требует потверждения запроса центром сертификации. Они обычно сильно дороже, чем DV-сертификаты, т.к. включают в себя ручную валидацию.

Ограничения по использованию сертификатов - Wildcards и SANы​

Обычно сертификат валиден только для одного полного доменного имени (FQDN, fully qualified domain name). Т.е., сертификат, купленный для , нельзя использовать для или .

Однако, если вам требуется защитить кроме основного домена еще и несколько поддоменов, вы можете приобрести Wildcard-сертификат. Wildcard-сертификат покрывает все поддомены под доменным именем. К примеру, Wildcard-сертификат для *. может быть использован для:

Однако, он не может быть использован одновременно для и . Для того, чтобы покрыть несколько доменов в пределах одного сертификата, необходимо купить SAN (Subject Alternative Name) сертификат. Такие сертификаты позволяют защитить четыре дополнительных домена в добавок к основному домену. К примеру, вы сможете использовать один и тот же сертификат на:

Также можно изменить доменное имя, но для этого потребуется перевыпустить сертификат.

Для чего используются коммерческие сертификаты?​

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

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

98cb47103164d0ab452a2be5b55108d6.jpg

Кодировка сертификатов и расширения файлов​

Сертификаты могут быть закодированы как:

  • бинарные файлы (.DER)
  • ASCII base64 файлы (.PEM)
Основные используемые расширения файлов:

  • .DER
  • .PEM (Privacy Enhanced Electron Mail)
  • .CRT
  • .CERT
Обратите внимание: между расширением файла и кодировкой нет корреляции. Это означает, что .crt файл может быть закодирован также, как и .der или .pem файл.

Вопрос: как узнать, у моего файла кодировка .der или .pem?
Ответ: Вы можете использовать утилиту openssl для того, чтобы определить тип кодировки или произвести конвертацию. См. туториал . Также вы можете открыть файл, и, если это ASCII текст, значит, это файл с кодировкой .PEM.

Примеры сертификатов​

Поскольку .pem сертификаты по факту являются ASCII файлами, они могут быть прочитаны простым текстовым редактором.

7d9a68e9159200375e5625ed0e507ee7.jpg

Важный момент: обратите внимание, что сертификаты начинаются со строки Begin Certificate и заканчиваются строкой End Certificate.

Сертификаты могут хранится как в собственном файле, так и быть объединенными с другими сертификатами в едином файле, называемым пакетом (bundle).

Корневой пакет сертификатов центра сертификации (Root CA Bundle) и хэшированные сертификаты​

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

В Linux системах на базе Debian такие корневые сертификаты хранятся в директории /etc/ssl/certs в файле (пакете) ca-certificates.crt. Этот файл создаётся системой и обновляется, когда командой update-ca-certificates добавляются новые сертификаты. См. .

Файл ca-certificates.crt выглядит как-то так:

1ff3e8f14ad57a266f8d562124fc426f.jpg

Папка certs также содержит и индивидуальные сертификаты или символические ссылки (symbolic links) на сертификаты вместе с хэшем. Хэш-файлы создаются командой c_rehash и использются, когда вместо файла указывается директория. Например, утилита mosquitto_pub может быть запущена таким образом:

mosquitto_pub --cafile /etc/ssl/certs/ca-certificates.crt
mosquitto_pub --capath /etc/ssl/certs/

Корневые сертификаты, промежуточные сертификаты, цепи сертификатов, пакеты​

ЦС может создавать дочерние ЦС, которые также могут выдавать клиентам сертификаты.

521a8d25571252e09c6502f675ce982a.jpg

Клиентам для того, чтобы потвердить подлинность сертификата, необходимо проверить подписи сертификатов всех ЦС в цепочке (chain) ЦС. У клиента может быть уже установлен корневой сертификат, но, скорее всего, не установлены сертификаты промежуточных ЦС.

29d2b1773218a90362d28b7557b306e5.jpg

Следовательно, сертификаты часто поставляются в виде пакетов (bundle). Пакет содержит сертификаты всех ЦС в цепочке в едином файле, обычно имеющим название CA-Bundle.crt.

Если вам прислали индивидуальыне сертификаты, вы сами можете объединить их пакет.

Видео​

моё видео, которое покрывает все пункты, описанные выше. Еще я нашёл от Microsoft, объясняющее вышеописанное.

Решение проблем​

Если у вас есть проблемы с цепочкой сертификатов, на сайте есть можно их проверить и найти информацию о том, как решить эти проблемы.

Часто задаваемые вопросы и ответы​

Q - Что такое trusted store?
A
- Список сертификатов ЦС, которым вы доверяете. Во всех браузерах имеется список доверенных ЦС.

Q - Могу ли я добавить собственный удостоверяющий центр в trusted store моего браузера?
A
- Да, в Windows, если кликнуть ПКМ по сертификату, вы увидите пункт с установкой.

2e85db77f7417f9dec0812fc59af8a90.jpg

Q - Что такое самоподписанный сертификат?
A
- Самоподписанный сертификат - сертификат, подписанный и проверяемый одним и тем же субъектом. Это как будто бы вы сами себе одобряли заявку на получение пасорта (см. в )

Q - Что такое идентификатор (fingerprint) сертификата?
A
- Это хэш сертификата, используемый для проверки сертификата без необходимости иметь установленный сертификат ЦС. Это очень полезно для небольших устройств, на которых нет памяти для хранения файлов ЦС. Также он используется для ручной проверки сертификатов. Более подробно - .

Q - Что будет, если сертификат сервера украдут?
A
- Его можно отозвать. Существует некоторое количество способов проверки клиентом (браузером), отозван сертификат или нет (см. ).


 
  • Теги
    ssl ssl сертификаты сертификат
  • Назад
    Сверху Снизу