Что такое промежуточный сертификат и зачем он нужен?

Что такое промежуточный сертификат и зачем он нужен? ФСС

Промежуточный сертификат SSL (intermediate certificate) – это одно из звеньев в цепочке доверия, которое позволяет связать Ваш личный SSL сертификат с корневым центром сертификации.

Сегодня мы продолжаем разбираться, как устроен TLS и чем он может быть полезен Патрику и его друзьям. Первую часть истории можно прочитать тут.

Мы остановились на том, что сервер отправил свою часть TLS-handshake клиенту. Теперь клиент должен прежде всего проверить сертификаты – и это самая тяжелая из вещей, которые ему обязательно надо сделать.


Что такое промежуточный сертификат и зачем он нужен?

Корневой сертификат SSL – одна из частей схемы PKI (инфраструктуры публичных ключей), которая идентифицирует корневой центр сертификации. Важность SSL сертификации и преимущества защищенного https соединения оценили многие пользователи. Использование SSL гарантирует:

Но возникает вопрос: откуда берутся цифровые сертификаты безопасности и кто отвечает за их надежность? Есть несколько основных доверенных центров сертификации, которые выдают сертификаты SSL и Code Signing. Они проверяют, действительно ли клиент, запросивший SSL имеет доступ к домену или является представителем запрашивающей организации. Кроме того, именно центры сертификации несут ответственность за конфиденциальность передаваемой информации. Массовое применение сертификатов SSL привело к большому количеству сертификационных центров, каждый из которых подписывает предоставляемые решения своим именем. Чтобы браузер пользователя мог отличать поставщиков SSL друг от друга, а также определить их надежность, в нем применяется список доверенных центров сертификации.

Содержание
  1. Ответ клиента
  2. Промежуточный центр сертификации SSL
  3. Установите сертификат в панели управления хостингом
  4. Cтруктура SSL сертификатов
  5. Можно ли создать корневой сертификат самому?
  6. Корневые и промежуточные сертификаты уполномоченных Удостоверяющих Центров России
  7. Шифрование ГОСТ
  8. Как это использовать
  9. Установка SSL-сертификата на хостинг RU-CENTER
  10. Маленький бонус
  11. Certificate verification
  12. Root certificate
  13. Intermediate certificate
  14. Basic Constraints
  15. CAPI и SCVP
  16. Как всё это тестить?
  17. Как получить корневой сертификат SSL?
  18. Установка SSL-сертификата на сайт (новый интерфейс)
  19. Зачем применять промежуточный сертификат?
  20. Для чего нужен корневой сертификат SSL?
  21. Не протух ли сертификат?
  22. Тот ли домен?
  23. Subject Alternative Name
  24. Тот ли тип использования?
  25. Не отозван ли сертификат?
  26. Certificate Revocation List
  27. OCSP
  28. OCSP stapling
  29. Сertificate Transparency
  30. Дополнительная защита
  31. DANE
  32. HPKP
  33. Policy
  34. Скачайте выпущенный сертификат на ваш компьютер
  35. TLS-handshake full vs resumed
  36. Session ID
  37. Session ticket
  38. Reinit
  39. Что в TLS 1

Ответ клиента

Итак, Патрик проверил сертификаты и начинает отвечать Губке Бобу.


Что такое промежуточный сертификат и зачем он нужен?

Если у клиента просили сертификаты, он их отдает. Дальше он отдает информацию для того, чтобы сделать ключики – так же, как сервер, clientKeyExchange. Поле CertificateVerify – неинтересная инфа на тему «как валидировать сертификат», в TLS 1.3 она и выглядит-то уже по-другому, потому что не сильно нужна.

После этого клиент переходит на шифрованный канал и посылает сообщение Finished – «я готов к шифрованному каналу». Сервер проверяет это сообщение – что там всё нормально, как договорились, что оно расшифровывается, что не успели на данном этапе ничего подменить и это всё еще Патрик, — тоже переходит на шифрованный канал и отдает свое Finished-сообщение, которое в свою очередь проверяет клиент. И после этого идет общение уже данными приложений по шифрованному каналу.


Что такое промежуточный сертификат и зачем он нужен?

Промежуточный центр сертификации SSL

Существует два типа сертификационных центров: корневые и промежуточные. Часто SSL сертификаты выдаются промежуточными центрами сертификации. Таким, например, является бренд AlphaSSL для GlobalSign или RapidSSL для компании Geotrust. Для того, чтобы SSL сертификат был доверенным, а часто и для того, чтобы вообще установить защищенное соединение, он должен быть выдан центром сертификации, включенным в список доверенных в браузере или устройстве. Поэтому, прежде, чем установить соединение с сервером, браузер клиента проверяет содережащийся список с установленными корневыми сертификатами. Для примера возьмем PositiveSSL, установленный для личного кабинета на нашем сайте emaro-ssl.ru.


Что такое промежуточный сертификат и зачем он нужен?

Установите сертификат в панели управления хостингом


<img class="img-fluid" src="https://www.nic.ru/help/upload/image/Screenshot

.png» title=»»>

2.2. Перейдите к управлению хостингом.


Что такое промежуточный сертификат и зачем он нужен?

Что такое промежуточный сертификат и зачем он нужен?

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

— SSL-сертификат на домен имеет в названии доменное имя, для которого выпущен сертификат, он загружается первым.

— При установке сертификатов, выпущенных в RU-CENTER, система автоматически устанавливает промежуточные сертификаты, загружать их вручную нет необходимости.

— Если у вашего сертификата несколько промежуточных (имеют в названии слово «intermediate») сертификатов, то необходимо загрузить их по очереди, нажав на кнопку Добавить промежуточный сертификат. Корневой («root») сертификат должен быть загружен последним, в качестве промежуточного.

— При копировании необходимо убедиться в наличии пяти тире по обе стороны от BEGIN и END. В секретном ключе не должно быть лишних пробелов, разрывов строк или дополнительных символов, которые непреднамеренно были добавлены.

— Если приватный ключ защищен паролем, введите его в соответствующее поле и нажмите кнопку Установить.


<img class="img-fluid" src="https://www.nic.ru/help/upload/image/ssl-host2

.png» title=»»>

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

Включая SSL-сертификат для домена второго уровня, вы включаете его и для доменов третьего уровня, если для них нет других включенных SSL-сертификатов.

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


Что такое промежуточный сертификат и зачем он нужен?

2.6. Установка завершена. Проверьте доступность сайта по протоколу HTTPS через несколько минут, обратившись к нему по адресу https://ваш_домен.

3.1. Если на вашем сайте установлена CMS, вам необходимо произвести дополнительные действия по настройке HTTPS-соединения в административной панели сайта в соответствии с документацией, и возможно, исправить ссылки, содержащие http:// в текстах на сайте.

Подробнее о настройке сайта для работы по HTTPS.

3.2. В качестве универсального способа для перенаправления запросов с протокола HTTP на HTTPS вы можете добавить в файл .htaccess следующие директивы:

Header always set Content-Security-Policy «upgrade-insecure-requests;»

Для корректной работы должен быть включен модуль headers_module в разделе Управление веб-сервером панели управления хостингом.

Подробнее о настройке файла .htaccess.

3.3. Если после настройки перенаправления сайт отображается некорректно, то это может быть связано с наличием смешанного контента (Mixed Content).

В этом случае часть содержимого загружается на страницу сайта по небезопасному протоколу HTTP вместо HTTPS, что не позволяет считать страницу сайта полностью безопасной. Как правило, это можно исправить методом замены абсолютных ссылок на относительные, т.е. в каждом файле проекта поменять ссылки вида — https://site.ru/content/ на относительные— /content/, а для внешних ссылок указать в адресе протокол https://.

Cтруктура SSL сертификатов

Сертификационные центры могут выдавать множество SSL сертификатов, связанных по принципу древовидной структуры. Так, корневой сертификат является корнем дерева, секретным ключом которого подписываются другие сертификаты. Все промежуточные сертификаты (intermediate), находящиеся сразу под корневым, перенимают степень доверия к нему, так как подпись корневым сертификатом является чем-то вроде нотариального удостоверения личности. S SL сертификаты, находящиеся далее по структуре, таким же образом зависят от уровня доверия к промежуточным (intermediate). На примере сертификационного центра Comodo, структуру SSL сертификатов можно изобразить следующим образом:

Можно ли создать корневой сертификат самому?

И все же в некоторых случаях создать свой корневой сертификат SSL – выгодно. Так, например, поступили с сервисом Webmoney. Его владельцы зарегистрированы в качестве центра сертификации и обеспечивают своих пользователей самоподписанными клиентскими сертификатами безопасности, на основе которых осуществляется индивидуальная аутентификация каждого пользователя в системе.

Корневые и промежуточные сертификаты уполномоченных Удостоверяющих Центров России

Время на прочтение

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

Я давно хотел автоматизировать проверку подписей ответов органов власти (я много переписываюсь) и проверку «выгрузок» Роскомнадзора на подлинность (по роду общественной деятельности). Самой большой проблемой было достать промежуточные сертификаты из цепочки. Потому что существовал невнятный Excel-файл корневых УЦ на сайте Минсвязи и всё. А промежуточные надо было искать по сайтам соответствующих УЦ. Жизнь — боль.

Что такое «промежуточные сертификаты». Напомню как это работает. Допустим, мы хотим проверить некое подписанное письмо. Письмо подписано ключом. Есть сертификат, который удостоверяет этот ключ. Сертификат кем-то выдан и тоже подписан каким-то ключом с прилагаемым сертификатом. И тот сертификат точно также. И так до момента, когда сертификат выдан сам себе. При проверке мы имеем (принесли, поставили из пакета, нам выдали на флешке) некий набор вот этих конечных сертификатов, которым мы верим. Верим потому что мы верим тому, кто нам их выдал. В мире веба мы верим браузеру и их набору корневых сертификатов. В мире веба при соединении по HTTPS передаются от сервера к клиенту также и промежуточные сертификаты. Поэтому в мире веба у нас всегда есть вся цепочка.

Внезапно (я не знаю точно когда) и незаметно на сайте Госуслуг появилась вот такая ссылочка:
e-trust.gosuslugi.ru/CA

Я наскоро написал программку, которая превращает XML-файл со списком УЦ и сертификатами с этого сайта в привычный PEM формат.

Затем я автоматизировал её и получил постоянно поддерживаемый репозиторий сертификатов в привычном для *NIX мира виде.

Шифрование ГОСТ

Шифрование ГОСТ поддерживается в LibreSSL не помню с какой версии. Но в Alpine Linux от 3.5 уже поддерживается. С OpenSSL всё сложнее. Шифрование ГОСТ идёт с OpenSSL от версии 1.0.0 до версии 1.0.2 включительно. Но например в CentOS шифрования ГОСТ нет. Пользователи CentOS должны страдать. Для Debian, Mint, Ubuntu с OpenSSL версии 1.1.0 и выше требуется установка пакета libengine-gost-openssl1.1, поддерживаемого криптоэнтузиастом Вартаном Хачатуровым (кстати, можно ему помочь).

Ну и в 2018 году у нас есть Docker, а в Alpine Linux, как я уже упоминал, всё работает.

Как это использовать

Короткие примеры для проверки «выгрузки» Роскомнадзора с открепленной подписью. Файл «выгрузки» — dump.xml, открепленной подписи — dump.xml.sig. Даже я проверял их раньше только на целостность подписи, но не на соответствие источнику.

git clone https://github.com/schors/gost-russian-ca.git ./
openssl smime -verify -engine gost -CAfile gost-russian-ca.git/certs/ca-certificates.pem -in dump.xml.sig -inform DER -content dump.xml -out /dev/null

git clone https://github.com/schors/gost-russian-ca.git ./
openssl smime -verify -CAfile gost-russian-ca.git/certs/ca-certificates.pem -in dump.xml.sig -inform DER -content dump.xml -out /dev/null

Читайте также:  Как проходят проверки ФСС

И, конечно, можно применить утилиту c_rehash в папке certs, а затем использовать опцию -CAdir вместо -CAfile.

И с этого момента можно не пользоваться сайтом Госуслуг, Контура и странными программами вроде КриптоПро для простой задачи проверки подписи. А главное, что теперь можно и автоматизировать.

Установка SSL-сертификата на хостинг RU-CENTER

Если вы получили SSL-сертификат в рамках нашей акции «SSL-сертификат в подарок» или купили сертификат напрямую в RU-CENTER, то его установка на хостинг производится в автоматическом режиме. Дополнительные действия для установки сертификата не потребуются, можно сразу приступать к настройке сайта.

Если у вас еще нет SSL-сертификата, вы можете заказать его в RU-CENTER.

Специалисты RU-CENTER могут провести все необходимые операции для корректной установки SSL-сертификата на сайт за вас: оставьте заявку на оказание услуги «Настройка SSL-сертификата».

Если вы устанавливаете SSL-сертификат, выпущенный не в RU-CENTER, перейдите к пункту 2.1 этой инструкции.

Инструкцию по работе с установленными SSL-сертификатами вы можете увидеть в этой статье.

Маленький бонус

То, что не влезло.


Что такое промежуточный сертификат и зачем он нужен?

На картинку тоже не всё влезло – тема очень большая, но на практике можно фокусироваться таким образом, чтобы на любом уровне понимать идею в целом и смочь разгрести что происходит, понять, что вам нужно доучить, что сейчас конкретно нужно узнать и всё вот это. Эта картинка — про ключевые слова. Из литературы можно рекомендовать очень крутую статью на русском языке «Ключи, шифры, сообщения: как работает TLS» – прочитать целиком вряд ли удастся, но в качестве справочника пригодится. Открыл, нашел что надо, почитал, ключевые слова узнал, пошел в википедию и на английском прочитал (на русском почему-то плохо написано). На английском написано отлично: идея, зачем, почему, ссылочки. Не знаешь, что такое HSTS – иди в википедию, там будет ссылочки на статьи для Патриков, то есть чайников. Еще на RFC, но это читать невозможно. Общий смысл станет понятен даже из самой статьи в Википедии.

Вот и всё! Вы молодцы 🙂

Certificate verification

Возможно, вы обратили внимание на формулировку: посылается не сертификат, а сертификаты – сейчас станет понятно, почему (в общем-то, догадаться нетрудно).


Что такое промежуточный сертификат и зачем он нужен?

Сертификат подписывается ишьюером – тем человеком, который этот сертификат выписал. Для того, чтобы считать этот сертификат правильным и все данные в нем верными, мы должны доверять этому ишьюеру – то есть верить, что он всякую фигню не подписывает. Чтобы вся эта система работала, придумали такую концепцию как корневой сертификат (root certificate).

Root certificate

В принципе, это даже не обязательно должен был быть сертификат – вполне хватило бы просто пары ключей. Потому что единственное, что нам от него надо – это знать, что такому-то центру сертификации (Certificate Authority, CA) соответствует такой-то публичный ключ. Тогда мы можем проверить все сертификаты, которые он выписал, и если мы считаем, что CA не врет, значит, и в сертификатах всё верно. Так что на самом деле Root CA Certificate это такой же сертификат, как и все, просто самоподписанный.

Откуда появляется вера в центры сертификации как в «хороших парней»? Все просто договорились, что вот таким-то организациям можно доверять. У каждого клиента есть список соответствия CA и публичного ключа. Таким образом, каждый клиент знает, что есть вот такой чувак и ключ для него такой. И так это всё и проверяется. То есть – просто записано, просто договорились, что верим.


Что такое промежуточный сертификат и зачем он нужен?

Intermediate certificate

Следующий в цепочке – Intermediate Certificate. Зачем он нужен? Дело в том, что в случае, если с Root CA Certificate что-то пошло не так, очень сложно его поменять. Центру сертификации нужно сделать новый приватный ключ, новый публичный ключ, всем это всё нужно обновить и так далее, это утомительно и это ломает всю секьюрити. И вообще, чем меньше мы работаем с машиной, на которой находится этот CA, тем меньше шансов, что этот приватный ключ украдут. Поэтому CA выписывают промежуточные сертификаты и уже с их помощью подписывают конечные (end-entity) сертификаты для вашего домена. Такая цепочка происходит очень часто и сертификат для нашего Патрика может быть подписан Губкой Бобом, а сертификат Губки Боба – Мистером Крабсом (а Губка Боб работает на мистера Крабса, как мы знаем из мультика). То есть это, в принципе, может быть вообще одна организация. Для того, чтобы всё это провалидировать, клиенту нужно всю эту цепочку составить и проверить: взять ключик рутового сертификата, проверить, что промежуточный правильный и подпись валидна, потом взять ключик промежуточного сертификата и проверить конечный сертификат.

Цепочка должна присутствовать в списке сертификатов, которые сервер отсылает. По факту бывает всякое. Бывает, что не посылаются. Symantec, например, очень любил в бесплатные сертификаты не вставлять промежуточный. И поэтому в браузерах ничего не работало.

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


Что такое промежуточный сертификат и зачем он нужен?

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

Basic Constraints

Еще одна штука, которая улучшает секьюрити (и с этим были серьезные баги до 2003 года в Internet Explorer): в промежуточных сертификатах в поле Basic Constraints должно быть написано CA: true, что означает, что этим сертификатам разрешено подписывать конечные сертификаты. Если этой штуки нет, то клиент при проверке цепочки должен сказать: «я не могу принять этот промежуточный сертификат» – несмотря на то, что все подписи совпадают, в субъекте всё совпадает и т.д. Этой штуки нет – до свидания. Internet Explorer не делал этой проверки и люди страдали из-за этого. Казалось бы, мелочь! Но тем не менее.

Еще раз, если кто не понял: если эту штуку не проверять, я могу получить сертификат от Let’s Encrypt и потом этим сертификатом подписывать что угодно. И цепочка будет валидная.

CAPI и SCVP

Еще про верификацию и про цепочку. Есть маленькая особенность – похвалим здесь Windows. Если сервер не отдал сертификат, в обычном (традиционном) подходе сертификат нам взять неоткуда, цепочки нет, всё сломалось. Так вот, в Windows есть такая штука как Certificate API, и она может достроить цепочку, взяв промежуточные сертификаты из своего хранилища. То есть, даже если сервер не передал, но у тебя в хранилище они есть, то цепочка построится и всё будет работать. Достаточно удобная штука, можно пересылать меньше информации, не уменьшая секьюрити.

Как эти сертификаты туда попадают? Либо залиты в хранилище, либо из сертификата, установленного на сервере. Например, в Plesk, если получить сертификат от Comodo и поставить его на домен – в хранилище попадет промежуточный сертификат от Comodo.

Ну и еще люди, которым Windows нравится, придумали SCVP (Server-based Certificate Validation Protocol). В действительности не работает почти ни у кого и нигде – в смысле глобально и массово, — но как концепция есть. Более того, есть продукты, которые это делают, и даже в каких-то сетях это может быть настроено. Это сервис, который за тебя эту цепочку строит и частично даже проверяет, что удобно. Если там заявлена поддержка DPV (Delegated Path Validation), то он цепочку еще и провалидирует. То есть, клиенту надо этому сервису отправить сертификат и получить ответ – продолжать сессию или рвать.


Что такое промежуточный сертификат и зачем он нужен?

Предположительно это могло бы всё ускорить, но из-за того, что сервису тоже надо как-то доверять, идея глохнет. И всё-таки она была.

Итак, вот у нас получается такая вот цепочка.


Что такое промежуточный сертификат и зачем он нужен?

Прежде всего мы проверяем, что с подписями у нас всё нормально: выстраиваем цепочку, проверяем подписи – и считаем, что содержимое сертификатов верно. Дальше нам надо проверить конечный сертификат. Промежуточный нам проверять не надо, потому что мы идем к Патрику и проверить нам надо только самый последний сертификат.

Как всё это тестить?

Инструментов для тестирования много, большинство из них не очень, вот эти плюс-минус ничего:

Как получить корневой сертификат SSL?

Купив SSL сертификат на нашем сайте, Вы получите архив, содержащий 3 файла сертификатов:

Установка SSL-сертификата на сайт (новый интерфейс)

Зачем применять промежуточный сертификат?

Обнаружив, что emaro-ssl.ru подкреплен промежуточным сертификатом PositiveSSL CA 2, который в свою очередь привязан к корневому, браузер может установить защищенное https соединение. В некоторых случаях, особенно для если речь идет об EV SSL (с расширенной проверкой), цепочка доверия может содержать два или три промежуточных сертификата Intermediate. Это делается для обеспечения более надежного уровня защиты.

Цепочка правообладателей может быть определена по цифровым подписям SSL сертификата. Эта процедура может занимать продолжительное время или вообще оказаться невозможной при отсутствии доступа в интернет. Использование установленного промежуточного сертификата позволяет браузеру сразу связать используемый для обеспечения безопасности SSL сертификат с корневым и избежать дальнейших проверок. Таким образом, промежуточный сертификат служит для проверки https соединения, установленного посредством того или иного SSL-сертификата, и при необходимости может ее облегчить.

Intermediate certificate содержит подробную информацию о цепочке обладания правом на издательство SSL и включает в себя:

Для чего нужен корневой сертификат SSL?

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


Что такое промежуточный сертификат и зачем он нужен?

Что же касается таких доверительных центров сертификации, как Comodo, Symantec, Thawte, GeoTrust и GlobalSign, то данные об их корневых сертификатах в обязательном порядке добавляются во все современные браузеры. Их список в настройках обозревателя выглядит следующим образом:


Что такое промежуточный сертификат и зачем он нужен?

Но для правильного распознавания SSL для Вашего личного доменного имени, необходимо создать так называемую цепочку доверия (trust chain) из доменного, промежуточного и корневого сертификатов SSL. Для этого необходимо установить корневой, а также промежуточный сертификаты на своем сервере. Процесс установки производится по разному, в зависимости от Вашего программного обеспечения. Для наиболее известного ПО на нашем сайте можно найти инструкции по установке SSL. Заметьте, что в отдельных случаях для правильного распознавания необходимо создать ca-bundle – файл, в котором содержится информация корневого и промежуточного сертификатов.

Читайте также:  Глава 18. Нативный SL

Метод установки зависит от программного обеспечения, поэтому в каждом отдельном случае рекомендуем воспользоваться нашими инструкциями по установке. Следует заметить, что в некоторых случаях (например, для Apache), необходимо пройти дополнительный шаг – создать ca bundle.

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


Что такое промежуточный сертификат и зачем он нужен?

Дальше мы из этого сертификата достаем следующие поля и начинаем проверять их. Вы видите, что ишьюер у нас – Global Sign, мы взяли его ключик и проверили, что подпись работает.

Не протух ли сертификат?

После этого нам надо проверить, что сертификат не протух – это логично, ведь сертификаты выдаются на какое-то время.


Что такое промежуточный сертификат и зачем он нужен?

Сейчас все certificate Authority договорились, что максимальный срок – 2 года (раньше было 3). Еще дальше они хотят сделать 1 год, а некоторые радикалы хотят, чтобы был месяц. Let’s Encrypt сейчас на 3 месяца выдает. А совсем радикальные радикалы хотят на каждое соединение новый сертификат выписывать. Почему некоторые люди так этим озабочены, станет понятно попозже, когда дойдем до пункта «Не отозван ли сертификат?». Еще из интересного – сертификат может быть выписан на будущее, так что надо проверять дату старта (по-хорошему).

Тот ли домен?

Тут всё понятно: если домен Wikipedia, а сертификат выписан на домен Plesk, то что происходит вообще? Кажется очевидным и капитанистым, но было несколько багов, когда клиенты это не проверяли. Сейчас, по счастью, такого бардака уже нет и стараются проверять все. Но опять-таки есть нюанс. Это SAN – Subject Alternative Name.


Что такое промежуточный сертификат и зачем он нужен?

Subject Alternative Name

В subject у нас может быть только один домен — в нашем случае там, кстати, есть звездочка, про это попозже, это так называемый wildcard-сертификат. Итак, в субъекте доменное имя одно, но если хочется много (например, у нас есть сабдомены и/или разные имена типа plesk.ru, plesk.com и т.д., и хочется один сертификат на это всё иметь) – тогда есть возможность всё это запихать в это поле SAN. Но нужно, чтобы это работало, во-первых, на сервере, во-вторых, на клиенте. Потому что, чтобы сервер отдал правильный сертификат, клиент должен ему как-то передать, куда конкретно он пришел. Это важно. И когда сервер выбирает сертификат, он должен знать Subject Alternative Name, потому что, может быть, имя домена – там. За всё это отвечает такое расширение TLS, как SNI (Server Name Indication), на эту тему есть 4 RFC, – короче, возможность есть, но не все это поддерживают. Например, у продуктов на GNU TLS с поддержкой SNI всё неплохо, а вот на OpenSSL многие не поддерживают. Кажется, это потому, что в GNU TLS это проще.

Ладно, мы, допустим, всё это умеем. Всё хорошо, всё проверили, пришли сюда.


Что такое промежуточный сертификат и зачем он нужен?

Как мы должны проверять wild-card? Отдельный момент. Можно просто запомнить: звёздочка это не вообще звёздочка, а только один сегмент.

Поэтому wild card сертификат без SAN используется довольно редко. Хочется защитить не только сабдомены, но и сам домен – а поле у тебя одно. С этим связаны интересные штуки, как определить, насколько сертификат хорош – есть разные рекомендации. Например, Google Chrome форсит людей на то, чтобы даже если в субъекте у тебя прописан domain.com, то чтобы в SAN он тоже был, потому что они хотят проверять только поле SAN, а субъект не проверять. Но пока еще проверяют.

Еще интересный момент, что www.domain.com – это отдельное имя, и если мы хотим по нему ходить, его надо защитить отдельно. Не у всех это в голове есть.

Ну и да, как уже говорилось, серверу надо найти сертификат для домена. Как работает SNI – клиент в определенном заголовке передает, какой домен нужен. Поэтому это доступно даже на уровне TCP, где доменных имен нет – в TLS есть, а в TCP (и в FTP) нет. Поэтому если мы делаем TLS, мы можем передать имя, но мало передать имя – надо же серверу найти этот сертификат, и здесь есть разные нюансы с разными продуктами. Продукты на Windows нередко находят этот сертификат в хранилище сертификатов, а для продуктов на Linux нужно указывать конфиги, где брать эти сертификаты. И здесь тоже есть разные проблемы. Мы недавно чинили SAN в Postfix – там может быть очень простая вещь — мы, например, указываем, что для domain.com сертификат такой, а человек приходит c mail.domain.com. А mail.domain.com – это не domain.com. Всё, сервер не может найти сертификат, всё развалилось. То есть кому-то надо указывать, кто-то сам находит. Для тестирования и разработки это важная вещь в аспекте SAN.

Ок, пойдём дальше.

Тот ли тип использования?

Кроме проверки, тот ли это домен, не истёк ли срок годности и валидна ли подпись, из таких вещей, которые достаточно просто делаются, у нас еще есть пункт «тот ли тип использования».


Что такое промежуточный сертификат и зачем он нужен?

Сертификаты бывают разные. То есть, если в Key Usage не указаны вот эти вот два параметра, то это – по идее! – должно влиять на то, как клиент с этим работает.

Key agreement – это как раз когда мы выписываем сеансовые ключи и договариваемся о них. Обычно вся эта коммуникация подписывается или шифруется вот этим вот публичным ключом, который чуть выше. Но если в key usage не прописан key agreement, то это означает, что ишьюер этого сертификата запрещает использовать этот сертификат для вот этого назначения. Сейчас на практике это почти не встречается, то есть эти вещи у большинства сертификатов одинаковые, но тем не менее — в принципе могут быть и другие. И бывает, что сертификат НЕ подходит для чего-то. Для чего он подходит – написано здесь. Клиент должен это проверять. Кстати, нередко бывает, что в extended key usage вот это вот ‘TLS Web Server Authentication’ у промежуточных сертификатов отсутствует.

Не отозван ли сертификат?

Самая интересная вещь – мы дошли до нее, ура! Самая прикольная, самая неработающая 🙂

Если говорить кратко, то сейчас здесь во всей инфраструктуре TLS очень большие проблемы, потому что: не работает ничего. И эту проблему как раз и хотят решать тем, чтобы срок действия сертификата сделать очень маленьким. Когда нужно отзывать сертификат? Чаще всего – когда ваш приватный ключ утек. Ваш приватный ключ утек – вы попали. Надо сертификат отозвать, потому что если не отозвать, тот кто украл ваш ключ, сможет подсовывать клиентам ваш сертификат и представляться вами. Надо сказать: чуваки, я поменял свой ключ – тот сертификат не действителен!

Если сделать время действия сертификата очень маленьким, то в принципе можно не отзывать, а подождать, когда он кончится. Отсюда все эти экстремальные предложения с минутами и часами. Ну, а если у тебя сертификат на 3 года, а ключ украли на второй день – то три года кто-то сможет представляться тобой.

Как же проверить, отозван сертификат или нет?

Certificate Revocation List


Что такое промежуточный сертификат и зачем он нужен?

Поэтому этот механизм считается устаревшим, но в стандартах всё еще есть и по-хорошему надо бы его использовать. Google Chrome на него забил уже давно, Mozilla тоже.

OCSP

Есть другая штука – OCSP. Это примерно то же самое, только вместо того, чтобы качать файлик, делается специальный запрос на то, чтобы та сторона сказала тебе – отозван сертификат или нет. То есть, клиенту стало проще, а вот чуваку на той стороне проще не стало, потому что вместо того, чтобы просто отдавать список, надо по этому списку проверять запрос и говорить «да» или «нет». Если основываться на CRL, другого варианта, кроме этого, особо-то и нет – и это действительно лучше, чем чистый CRL. Тем не менее, Chrome забил и на это, остальные пока используют.

OCSP stapling

Это примерно в ту же степь, но тут мы уже начинаем уходить от структуры Certificate Authority. То есть возлагаем эту проверку на сервер. Как это работает: сервер периодически ходит по этому OSCP URL-у и говорит: «OCSP-resolver, посмотри-ка, вот этот мой сертификат – в отозванных или нет?». O CSP-resolver отвечает подписанным ответом, наш сервер его запоминает, и когда клиент приходит, ему отдаётся этот ответ. То есть у клиента есть подписанный ответ и в нём написано, что всё хорошо. Из-за того, что серверов меньше, чем клиентов и сервер может на какое-то время это кэшировать, нагрузка на всех становится меньше.


Что такое промежуточный сертификат и зачем он нужен?

Тут есть тоже некоторые проблемы: текущий механизм — это только на один сертификат, а у нас цепочка (и это важно). А еще, из-за того, что мой сервер отвечать на это не обязан, клиент не может рассчитывать на то, что OSCP-stapling точно будет. И поэтому отказаться ни от CRL, ни от OCSP не получается – просто потому, что серверы не обязаны опрашивать и отвечать. Ну и еще один аспект: если в вебе с этим нормально, то в почте всё плохо, а в FTP даже слов таких не знают.

Проблема того, что сервер не обязан отвечать, может решиться добавлением в сертификат еще одного поля – так как оно еще не утряслось, у него просто номер, — в котором мы говорим клиенту, что сервер таки обязан ответить, и если он не ответил, считать этот сертификат невалидным.

Читайте также:  Фонд социального страхования Кисловодска


Что такое промежуточный сертификат и зачем он нужен?

Вот это всё вместе теоретически может начать работать, но пока еще мало распространено.

Google и Mozilla, так как им всё это не нравится, сделали свой CRL. И зашили его в браузер. Огонь вообще! Это работает быстро, ну и на этом все плюсы заканчиваются. Для того чтобы не помереть, они не запихивают в него DV-сертификаты. То есть если DV-сертификат отозван, они считают – ну и ладно. Так что если DV-сертификат отозван и при этом нет OSCP-степлинга, Chrome об этом не скажет – он посчитает этот сертификат нормальным. На самом деле, правильно пользоваться OSCP-степлингом и OCSP Must Staple флагом в сертификате. С ним тоже не всё просто — большинство генераторов CSR сейчас не умеют его указывать, а большинство Сertificate Authority не умеют его выписывать.

Сertificate Transparency

Итак, всё хорошо, но Google не был бы Google, если бы не придумал еще одну технологию конкретно для себя. Она называется Сertificate Transparency. Откуда что идет: Google очень беспокоится о том, чтобы кто-нибудь не выписал плохой сертификат на него самого – чтобы именно Google не пострадал от того, что кто-то там выписывает какие-то нехорошие сертификаты. И вот с помощью Сertificate Transparency каждый владелец домена (и вообще кто угодно) может посмотреть, какие сертификаты на этот домен были выписаны. Дальше он может этот сертификат взять и с ним что-нибудь сделать. Например, проверить, хороший он или нет. Ну и возбудиться (или не возбудиться).


Что такое промежуточный сертификат и зачем он нужен?

Это не только технология, но и набор процессов. То есть Google говорит: ребята, вот у нас есть Сertificate Transparency, мы в него записываем только нормальные сертификаты – такие, где цепочка есть, цепочка правильная и всё нормально. Мы можем время записи Сertificate Transparency Log запихать в сертификат, чтобы клиент мог четче посмотреть, что вот этот сертификат в Transparency Log должен быть тогда-то. Мы гарантируем, что это вот эта штука не редактируема обратно (из-за того, что блокчейн) – ну то есть нельзя взять и подменить старые записи, можно только добавлять новые. И давайте, ребята, кто-нибудь из вас будет периодически ходить по этому логу, и проверять, что там всё нормально, а если что-то не так, говорить нам и мы будем это править. А другие ребята пусть держат у себя всё это, потому что надо, чтобы было много мощностей на вот эту вот штуку.

Сейчас Сertificate Transparency поддерживает DigiCert, недавно начал поддерживать Let’s Encrypt, а вот из валидаторов практически никого нет, Google сам всё это делает. Когда всё это заработает в полную силу и валидаторов станет больше, то плохих сертификатов должно стать меньше, потому что кто-нибудь будет возбуждаться. На картинке показан HTTP-заголовок Excpect-CT, его можно отдать и клиент будет обязан сходить в Сertificate Transparency и проверить, что вот этот сертификат в нем указан. А из-за того, что там еще есть timestamp, сложнее становится запихать плохую запись в Сertificate Transparency. Но, опять-таки — это не очень помогает с Revocation, можно сказать, вообще не помогает. Это только про то, что все сертификаты, выписанные на домен, владелец домена может посмотреть и возбудиться.

Вот такая вот штука. По большому счету – хайпа много, но ничего она не решает. А что решает (каким-то образом), но не используется – это DANE.

Дополнительная защита

Вся структура TLS является уязвимой в одной точке – точке доверия, то есть вот эти вот сертификационные центры, рутовые сертификаты — если с ними что-то не то, всё разлетелось. Есть по сути две попытки с этим как-то бороться.

DANE

Первая попытка, собственно, DANE – хранить информацию о сертификатах в DNS.


Что такое промежуточный сертификат и зачем он нужен?

Что такое промежуточный сертификат и зачем он нужен?

Давайте посмотрим на запись детальнее. Здесь есть разные поля: можно указать, что сертификат должен быть выписан именно этим Authority – это уже немного помогает. Принцип тот же, что и у САА, только уже после выписки. Это не зависит от того, смотрит ли ишьюер в САА запись или нет. В DANE написано: клиент обязан посмотреть, что сертификат, который он получил, выписан определенным Certificate Authority, и если это не так – ничего не выйдет. Всё зависит только от клиента и не зависит от CA. Это плюс.

Из остального остановимся на Domain issued certificate. В принципе, если бы всё хорошо работало (здесь ключевая проблема с DNSSEC), то мы бы могли указывать в своей DNS-записи свой сертификат и не зависеть ни от кого. То есть, если я владею доменом, сгенерировал хотя бы самоподписанный сертификат, указал его вот сюда, и DNSSEC работает нормально, то клиент доверяет моей DNS-записи и сертификат берет оттуда. Всё, CA не нужны. Бизнес на сертификатах рушится, денег никаких нет 🙂

Однако это всё не работает. Во-первых, есть EV-сертификаты, для которых всё-таки хочется проверить организацию. Во-вторых, проблема доверия уходит с Certificate Authority на инфраструктуру DNSSEC, которая считается недостаточно рабочей, потому что она мало распространена, на нее все забили, а еще там тоже есть уязвимости.

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

HPKP

Дальше еще есть одна интересная вещь, называется HPKP.


Что такое промежуточный сертификат и зачем он нужен?

Идея на картинке: мы в HTTP-заголовке отдаем собственно хэши сертификатов, которые клиент должен проверить, и если публичный ключ сертификата имеет другой хэш (то есть его нет среди перечисленных) — до свидания. Google в HPKP разочаровался и Chrome это не поддерживает. На этом можно закончить, хотя вообще выглядит интересно — если я знаю, какие у меня есть сертификаты, мне очень легко этот заголовок отдать, и это должно повышать секьюрити по идее.

Policy


Что такое промежуточный сертификат и зачем он нужен?

Как мы уже знаем, если браузер смотрит в это поле и находит там определенные сочетания циферок и буковок, то он должен понять, что это EV-сертификат и, возможно надо сделать дополнительные вещи. Вот тут у нас указан Global Sign Repository – и иногда браузер должен сходить по указанному там адресу и получить ответ, что всё хорошо. Это в основном работает для EV-сертификатов, для OV браузеры это часто просто игнорируют, ну и в DV этих полиси-то и нет собственно. Для чего это надо вам – просто для информации.

Скачайте выпущенный сертификат на ваш компьютер

1.1. На странице www.nic.ru зайдите в Раздел для клиентов, указав номер договора и пароль.


<img class="img-fluid" src="https://www.nic.ru/help/upload/image/lc
.png» title=»»>

<img class="img-fluid" src="https://www.nic.ru/help/upload/image/Screenshot

.png» title=»»>

1.3. Перейдите по ссылке с названием сертификата.


Что такое промежуточный сертификат и зачем он нужен?

<img class="img-fluid" src="https://www.nic.ru/help/upload/image/images_2

.png» title=»»>

1.5 При нажатии на пункт Приватный ключ на контактный адрес электронной почты отправляется ссылка, по которой необходимо перейти и получить ключ.

TLS-handshake full vs resumed

В этой статье мы не стали подробно останавливаться на том, как выбираются сессионные ключи. Там тоже много работы на процессоре, много вычислительных действий – и следующая проблема после безопасности это производительность. Всё это происходит медленно, особенно, если ходить в CRL списки и делать прочие дополнительные проверки. А если еще цепочка сертификатов огромная, то всё может быть прям совсем медленно, и с этим надо что-то делать.

Session ID

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


Что такое промежуточный сертификат и зачем он нужен?

Так это всё работает. Это побыстрее, но тоже есть проблемы, — возрастает нагрузка на сервер, ну и есть атаки с перехватом Session ID. Потому что этот Session ID идет по открытому каналу.

Session ticket

Еще для ускорения можно использовать Session Ticket — это в принципе то же самое, что и Session ID, только передается зашифрованный контекст, а не циферка, которую можно украсть. Бывает, что сессию установить не удалось, тогда придет алерт. С ними тоже связаны атаки на TLS, потому что алерты имеют определенную структуру и определенный размер. Если алерт произошел на этапе, когда уже трафик идет зашифрованным, то из-за того, что алерт понятной структуры и злоумышленник может знать, что ему в этом алерте отвечают – задача расшифровывания становится сильно проще. Поэтому в TLS 1.3 это уже не используется.

Reinit

Что еще бывает в TLS-handshake в принципе? Иногда серверу бывает нужно инициализировать сессию повторно – чаще всего тогда, когда сертификат клиента был не нужен и вдруг стал нужен. Тогда сервер говорит: давай перезапустим. Ну и клиент может сказать еще раз Client Hello. В TLS 1.3 это тоже убрали, потому что тоже были атаки – атаки были везде!


Что такое промежуточный сертификат и зачем он нужен?

Что в TLS 1

Все упомянутые трудности решаются использованием TLS 1.3. Половины проблем вообще нет, всё проще, красивее, всё прям отличненько. Но TLS 1.3 еще распространен маловато. Самые важные отличия TLS 1.3 (их очень много, они везде, поэтому только самые важные):

Основная проблема, что поддержка TLS 1.3 – она во всех браузерах, которые актуальны, есть, но не во всех по дефолту включена. Например, в Safari нет (но там очень легко включить), Google Chrome и Mozilla Firefox уже по дефолту поддерживают TLS 1.3. Ngnix с TLS 1.3 – без проблем, в Apache есть нюансы, а вот с почтовыми клиентами хуже — там только Exim молодец, а остальные не очень.

В общем, это наше будущее, там всё получше и попроще, самое главное. Но пока оно еще не везде наступило.

Оцените статью
ФСС Help
Добавить комментарий