- Что в tls 1.3?
- Устаревшая версия протокола безопасности
- 25 твитов об ssl-сертификатах
- Устаревший алгоритм шифрования
- Capi и scvp
- Ocsp stapling
- Root certificate
- Tls handshake
- Алгоритмы шифрования
- Возобновление сессии tls
- Как проверить сертификат tls удаленного smtp-сервера?
- Маленький бонус
- Не отозван ли сертификат?
- Рукопожатие
- Сertificate transparency
- Тот ли тип использования?
- Хеш и mac
Что в tls 1.3?
Все упомянутые трудности решаются использованием TLS 1.3. Половины проблем вообще нет, всё проще, красивее, всё прям отличненько. Но TLS 1.3 еще распространен маловато. Самые важные отличия TLS 1.3 (их очень много, они везде, поэтому только самые важные):
- Плохие шифры удалены, остались только хорошие. Инициализировать сессию TLS 1.3 на плохих шифрах не получится. Всё дело в новых cipher suites: тут и другие алгоритмы обмена сеансовых ключей, и так называемый HMAC – не будем углубляться в подробности, потому что Патрик устал. Вкратце: раньше подпись каждого TLS-пакета шла отдельно. На это были атаки, потому что было известно, какой там контент находится. Сейчас ее запихали вовнутрь (режим AEAD), и в TLS 1.3 по-другому быть не может, соответственно, мы избавились от таких атак.
- Handshake стал короче – нет старых сообщений, нет старых расширений, нет возможности по каким-то странным штукам обменяться ключиками. То есть, он тупо короче количественно – даже самый полный TLS 1.3 handshake короче, чем в TLS 1.2.
- Переход на шифрованный канал происходит почти что сразу. Для этого используются разные ключики: да, пока не договорились о хороших ключиках, оптимальных, мы используем какие попало, но канал уже шифрованный. То есть hello – hello и пошло всё зашифрованное. Из-за этого сложнее всё это ломать.
- Всё регламентировано, больше не надо пытаться менять размеры пакетов, забивая их ноликами, чтобы сложнее было расшифровывать.
- Своя пара ключей на каждую сеансовую фазу. Сеансовые ключи меняются: пока мы ни о чем не договорились – они такие, договорились о более крутых – они более крутые, сертификаты проверили и всё хорошо – еще другие ключи. В итоге их много, они усложняются и очень трудно это всё поломать. Еще одна важная вещь, почему это быстрее: Early Data (она же 0-RTT, Zero Round Trip Time) – это когда у тебя в TLS-handshake посылается полезная инфа – ну например GET-запрос. То есть нет такого, что поговорили-поговорили и только потом посылаем что-то отдельным потоком. Сразу же в handshake идет запрос. Как только сервер его получил, он начинает его обрабатывать, отдает клиенту свои данные, сертификат и пока клиент проверяет, сервер уже готов отдать. И может даже в TLS-handshake и отдать иногда.
- Есть pre-shared key, то есть клиент с сервером могут договориться и сохранить сеансовые ключи для последующих соединений. И, соответственно, когда происходит handshake таких вот договорившихся клиентов, на этап выбора ключей время не тратится. Долго объяснять, как это сделано криптографически, но тех атак, которые были на Session ID, вот в этом месте сейчас нет (что хорошо). Всё стало безопаснее и быстрее.
Основная проблема, что поддержка TLS 1.3 – она во всех браузерах, которые актуальны, есть, но не во всех по дефолту включена. Например, в Safari нет (но там очень легко включить), Google Chrome и Mozilla Firefox уже по дефолту поддерживают TLS 1.3. Ngnix с TLS 1.3 – без проблем, в Apache есть нюансы, а вот с почтовыми клиентами хуже — там только Exim молодец, а остальные не очень.
В общем, это наше будущее, там всё получше и попроще, самое главное. Но пока оно еще не везде наступило.
Устаревшая версия протокола безопасности
Технологии шифрования совершенствуются, но и хакерские атаки становятся все изощреннее. Постоянно растущие риски — одна из причин сокращения срока действия SSL-/TLS-сертификатов и обновления протокола.
Протокол TLS был представлен как апгрейд SSL (версии 3.0 на тот момент), поэтому любая версия TLS более безопасна чем SSL. Самый актуальный протокол — TLS 1.3, выпущенный в 2021 году, — имеет усовершенствованный криптографический алгоритм и позволяет браузеру быстрее подсоединиться к серверу сайта.
Важно использовать актуальную версию протокола безопасности и отключать все предыдущие версии. Существует несколько способов проверить, какой протокол у сайта:
- Во вкладке Security в Chrome DevTools:
- В онлайн-инструментах, проверяющих, какие версии TLS и SSL включены на сайте. Например:
Чтобы включить последнюю версию TLS, прежде всего убедитесь, что ваш сайт поддерживает ее. Запустите серверную проверку — например, в SSL Labs — и просмотрите результаты конфигурации:
После этого свяжитесь со своим хостинг-провайдером, чтоб узнать, как именно подключить актуальную версию протокола. Вам нужно будет указать правильную версию в файле конфигураций сервера.
Скажем, ваш сайт размещен на сервере Nginx. Вам нужно отредактировать файл nginx.conf, указав в нем установленную версию TLS. Также удалите из файла все ранее используемые версии, которые признаны устаревшими. Строка конфигурации будет выглядеть так:
ssl_protocols TLSv1.2 TLSv1.3;
Если же окажется, что ваш сайт не поддерживает TLS 1.2 или 1.3, стоит обратиться к провайдеру и по возможности сменить тариф (или провайдера).
25 твитов об ssl-сертификатах

SSL сертификаты. Для чего они нужны, какие бывают, от чего защищают, кто использует, как долго действуют, есть ли гарантия? Разберем основные вопросы – кратко, в режиме твиттера – не более 280 символов на ответ.
1. Что такое SSL?
SSL означает Secure Sockets Layer – это протокол, используемый для шифрования и аутентификации данных, передаваемых между приложениями, например, браузером и веб-сервером.
2. Как появился сертификат SSL?
SSL версии 1.0 был разработан Netscape в начале 1990-х. Но из-за недостатков безопасности так и не был опубликован. Первым общедоступным выпуском был SSL 2.0, вышедший в феврале 1995 года. Это была улучшенная версия, но лишь после полного изменения дизайна утвердилась версии 3.0.
3. В чем суть сертификатов?
SSL-протокол не позволяет злоумышленникам читать и изменять транзакции и сообщения между браузером и сервером, например, передачу данных кредитных карт, логинов и т.п. Это гарантирует, что все данные останутся конфиденциальными и защищенными.
4. Что такое TLS-сертификат?
TLS (Transport Layer Security) – преемник и улучшенная версия SSL, имеет более надежные алгоритмы шифрования, но несмотря на схожесть считается другим стандартом.
5. Какие же протоколы сейчас используются?
SSL, как ни странно сейчас не используются. Было 3 версии 1.0, 2.0 и 3.0 и на основе версии SSL 3.0 создали протокол TLS 1.0. Затем вышли версии TLS 1.1, 1.2 и 1.3, а применяются только две последние.
6. Какой принцип работы SSL-сертификата?
При подключении браузера к сайту происходит «SSL-рукопожатие» (создаются ключи “рукопожатия”), далее происходит обмен криптографическими данными и в конце формируются сессионные ключи, на основе которых происходит шифрование трафика.
7. Какие существуют сертификаты?
8. И для чего каждый из них?
9. Есть ли другие виды сертификатов?
Да, например, сертификат Multi-Domain SSL на несколько доменов – не требует покупки сертификатов на каждый домен и упрощает администрирование. Code Signing certificates предназначен для защиты вашего кода, контента и других файлов во время их передачи в онлайн режиме.
10. Какие данные в SSL-сертификате?
SSL-сертификат содержит информацию:
11. В чем различия между SSL и HTTPS?
SSL – протокол безопасности, используемый для установления защищенного соединения между веб-браузером и веб-сервером. HTTPS работает как подуровень между приложениями. HTTPS шифрует обычное HTTP-сообщение перед отправкой и расшифровывает его во время доставки.
12. Как узнать, использует ли сайт SSL/HTTPS?
Большинство браузеров помечают безопасные соединения, защищенные сертификатами SSL/TLS замком и/или сообщением.


13. Как браузер может понять, корректен ли сертификат?
Операционная система компьютера хранит список корневых сертификатов, составляющих цепочку доверия. При открытии сайта браузер проверяет всю цепочку, вплоть до корневого. Если хоть один из сертификатов оказывается недействительным, то и вся цепочка также недействительна.

14. Почему SSL сертификаты такие дорогие?
SSL-сертификаты можно рассматривать как страховку, они дороги из-за прилагаемых к ним гарантиям. Если что-то пойдет не так, то поставщик сертификатов SSL выплатит конечному пользователю, пострадавшему от сбоя SSL страховую сумму.
15. Существуют ли бесплатные сертификаты и насколько они безопасны?
Бесплатные сертификаты существуют, выполняют ту же функцию, что и платные, но обычно имеют самый низкий уровень безопасности (DV), на него, вероятно, не будет гарантии, т.е. они безопасны но до некоторой степени. При угрозе посетители вашего сайта не смогут требовать гарантии.
16. Где купить?
Если ваш хост не предлагает бесплатные SSL-сертификаты или вам нужен другой тип сертификата, вы можете приобрести собственный сертификат в центре сертификации или у реселлера, имеющего скидки, что будет дешевле.

17. Что такое центр сертификации?
Центр сертификации (Certificate Authority, CA) – международная организация, которая выпускает и несет ответственность за SSL-сертификаты. CA проверяет домены и источники, подтверждающие подлинность организаций. Центрам сертификации доверяет 99% браузеров.
18. Каков процесс получения сертификата, после того как вы его оплатили?
Сначала вы генерируете CSR и секретный ключ. Затем отсылаете CSR в орган сертификации (CA) и получаете архив с текстовыми / бинарными файлами для разных типов веб-серверов. Затем устанавливаете его на хостинге или своем сервере.
19. Как воспользоваться SSL/TLS сертификатом?
20. Как проверить правильность настройки сертификата?
Один популярных способов: зайдите на сайт Qualys, введите имя сайта и нажмите кнопку “submit. Сервис осуществит проверку и выдаст оценку в баллах. Если сайт получил А или А , то сертификат работает корректно.

21. Связаны ли как-то SSL-сертификат и продвижение в сети (SEO)?
Если ваш сайт не защищен сертификатом SSL, то он получает от Google отметку «небезопасно». Кроме того, если вы хотите, чтобы контент и сайт занимали высокие позиции в результата выдачи, виртуальный замок вам всё же понадобится. Но основная цель всё же безопасность соединения.
22. Какой срок действия сертификата?
Коммерческий сертификат действует 1 год. Срок действия сертификатов неуклонно сокращался с 10 лет в 2021 году, далее до 3 лет в 2021 году, затем до двух лет в 2021 году и до года в настоящее время. Бесплатные сертификаты действуют на 90 дней.
23. Почему SSL-сертификаты не делают вечными?
Изменяются стандарты безопасности, соответственно старые сертификаты должны обновляться. Помимо этого, устанавливаемый жизненный цикл сертификата уменьшает риски, связанные с возможными потерями закрытого ключа.
24. Защищает ли SSL данные сайта?
Сертификат SSL/TLS помогает защитить данные, передаваемые между посетителем и сайтом, и наоборот. Но это не означает, что информация на сервере полностью защищена – администратор должен сам решить, как ее сохранить, например, вероятно ему стоит зашифровать базу данных.
25. И всё-таки, зачем нужен SSL сертификат?
Любая информация, отправляемая через интернет, проходит через сетевое оборудование, серверы, компьютеры и прочие соединения, и если данные не зашифрованы, то это делает их уязвимыми для атак.
В заключение капля юмора. Так выглядит сайт с говорящим названием рубрики: “SSL сертификат купить дешево” – http://www.net.ru/ssl/ssl-sertifikat-kupit-deshevo

Материал подготовлен компанией ITSOFT. Размещение и аренда серверов и стоек в двух ЦОДах в Москве; colocation GPU-ферм и ASIC-майнеров, аренда GPU-серверов. Лицензии связи, SSL-сертификаты. Администрирование серверов и поддержка сайтов. UPTIME за последние годы составляет 100%.
Устаревший алгоритм шифрования
Когда пользователь заходит на сайт, происходит процесс «рукопожатия»: клиент (браузер) и сервер идентифицируют друг друга, браузер при этом проверяет подлинность SSL-/TLS-сертификата. Набор алгоритмов шифрования очень важен для этого процесса: браузер сообщает, какие комбинации шифров он поддерживает, и сервер выбирает лучшую из подходящих.
Набор алгоритмов шифрования состоит из нескольких шифров, отвечающих за разные функции. Перед разработкой TLS 1.3 самой надежной была такая комбинация:
- Алгоритм для обмена ключами между сервером и браузером (ECDHE)
- Цифровая подпись, удостоверяющая сертификат (ECDSA)
- Шифр для обмена данными (AES-256-GCM)
- Алгоритм для аутентификации сообщений (SHA384)
Комбинация в TLS 1.3 содержит только два последних шифра и по умолчанию не поддерживает устаревшие алгоритмы для обмена ключами и аутентификации сертификата.
Версия TLS 1.2 до сих пор считается достаточно надежной, но у нее есть уязвимости из-за большей вариативности алгоритмов шифрования и их качества. С TLS 1.3 выбор шифров ограничен самыми безопасными и весь процесс «рукопожатия» происходит проще и быстрее.
Если вы не знаете, какие шифры поддерживаются вашим сертификатом, стоит проверить их актуальность. Можно запустить онлайн-тест:
Если вы обнаружите устаревшие алгоритмы, нужно отключить их в настройках сервера. Кроме того, можно проанализировать рейтинг шифров и указать приоритетный порядок, чтобы браузеры выбирали самый надежный из поддерживаемых в вашем сертификате.
Capi и scvp
Еще про верификацию и про цепочку. Есть маленькая особенность – похвалим здесь Windows. Если сервер не отдал сертификат, в обычном (традиционном) подходе сертификат нам взять неоткуда, цепочки нет, всё сломалось. Так вот, в Windows есть такая штука как Certificate API, и она может достроить цепочку, взяв промежуточные сертификаты из своего хранилища.
Как эти сертификаты туда попадают? Либо залиты в хранилище, либо из сертификата, установленного на сервере. Например, в Plesk, если получить сертификат от Comodo и поставить его на домен – в хранилище попадет промежуточный сертификат от Comodo.
Ну и еще люди, которым Windows нравится, придумали SCVP (Server-based Certificate Validation Protocol). В действительности не работает почти ни у кого и нигде – в смысле глобально и массово, — но как концепция есть. Более того, есть продукты, которые это делают, и даже в каких-то сетях это может быть настроено.
Это сервис, который за тебя эту цепочку строит и частично даже проверяет, что удобно. Если там заявлена поддержка DPV (Delegated Path Validation), то он цепочку еще и провалидирует. То есть, клиенту надо этому сервису отправить сертификат и получить ответ – продолжать сессию или рвать.

Предположительно это могло бы всё ускорить, но из-за того, что сервису тоже надо как-то доверять, идея глохнет. И всё-таки она была.
Итак, вот у нас получается такая вот цепочка.
Прежде всего мы проверяем, что с подписями у нас всё нормально: выстраиваем цепочку, проверяем подписи – и считаем, что содержимое сертификатов верно. Дальше нам надо проверить конечный сертификат. Промежуточный нам проверять не надо, потому что мы идем к Патрику и проверить нам надо только самый последний сертификат.
Давайте проверять.
Ocsp stapling
Это примерно в ту же степь, но тут мы уже начинаем уходить от структуры Certificate Authority. То есть возлагаем эту проверку на сервер. Как это работает: сервер периодически ходит по этому OSCP URL-у и говорит: «OCSP-resolver, посмотри-ка, вот этот мой сертификат – в отозванных или нет?».
OCSP-resolver отвечает подписанным ответом, наш сервер его запоминает, и когда клиент приходит, ему отдаётся этот ответ. То есть у клиента есть подписанный ответ и в нём написано, что всё хорошо. Из-за того, что серверов меньше, чем клиентов и сервер может на какое-то время это кэшировать, нагрузка на всех становится меньше.
Тут есть тоже некоторые проблемы: текущий механизм — это только на один сертификат, а у нас цепочка (и это важно). А еще, из-за того, что мой сервер отвечать на это не обязан, клиент не может рассчитывать на то, что OSCP-stapling точно будет. И поэтому отказаться ни от CRL, ни от OCSP не получается – просто потому, что серверы не обязаны опрашивать и отвечать. Ну и еще один аспект: если в вебе с этим нормально, то в почте всё плохо, а в FTP даже слов таких не знают.
Проблема того, что сервер не обязан отвечать, может решиться добавлением в сертификат еще одного поля – так как оно еще не утряслось, у него просто номер, — в котором мы говорим клиенту, что сервер таки обязан ответить, и если он не ответил, считать этот сертификат невалидным.
Вот это всё вместе теоретически может начать работать, но пока еще мало распространено.
Google и Mozilla, так как им всё это не нравится, сделали свой CRL. И зашили его в браузер. Огонь вообще! Это работает быстро, ну и на этом все плюсы заканчиваются. Для того чтобы не помереть, они не запихивают в него DV-сертификаты. То есть если DV-сертификат отозван, они считают – ну и ладно.
Так что если DV-сертификат отозван и при этом нет OSCP-степлинга, Chrome об этом не скажет – он посчитает этот сертификат нормальным. На самом деле, правильно пользоваться OSCP-степлингом иOCSP Must Staple флагом в сертификате.
Root certificate
В принципе, это даже не обязательно должен был быть сертификат – вполне хватило бы просто пары ключей. Потому что единственное, что нам от него надо – это знать, что такому-то центру сертификации (Certificate Authority, CA) соответствует такой-то публичный ключ.
Откуда появляется вера в центры сертификации как в «хороших парней»? Все просто договорились, что вот таким-то организациям можно доверять. У каждого клиента есть список соответствия CA и публичного ключа. Таким образом, каждый клиент знает, что есть вот такой чувак и ключ для него такой. И так это всё и проверяется. То есть – просто записано, просто договорились, что верим.
Tls handshake
Перед тем, как начать обмен данными через TLS, клиент и сервер должны согласовать параметры соединения, а именно: версия используемого протокола, способ шифрования данных, а также проверить сертификаты, если это необходимо. Схема начала соединения называется TLS Handshake и показана на рисунке:

Разберём подробнее каждый шаг данной процедуры:
- Так как TLS работает над TCP, для начала между клиентом и сервером устанавливается TCP-соединение.
- После установки TCP, клиент посылает на сервер спецификацию в виде обычного текста (а именно версию протокола, которую он хочет использовать, поддерживаемые методы шифрования, etc).
- Сервер утверждает версию используемого протокола, выбирает способ шифрования из предоставленного списка, прикрепляет свой сертификат и отправляет ответ клиенту (при желании сервер может так же запросить клиентский сертификат).
- Версия протокола и способ шифрования на данном моменте считаются утверждёнными, клиент проверяет присланный сертификат и инициирует либо RSA, либо обмен ключами по Диффи-Хеллману, в зависимости от установленных параметров.
- Сервер обрабатывает присланное клиентом сообщение, сверяет MAC, и отправляет клиенту заключительное (‘Finished’) сообщение в зашифрованном виде.
- Клиент расшифровывает полученное сообщение, сверяет MAC, и если всё хорошо, то соединение считается установленным и начинается обмен данными приложений.
Ясно, что установление соединения TLS является, вообще говоря, длительным и трудоёмким процессом, поэтому в стандарте TLS есть несколько оптимизаций. В частности, имеется процедура под названием “abbreviated handshake”, которая позволяет использовать ранее согласованные параметры для восстановления соединения (естественно, если клиент и сервер устанавливали TLS-соединение в прошлом). Данную процедура рассмотрена подробнее в пункте «Возобновление сессии».
Также имеется дополнительное расширение процедуры Handshake, которое имеет название TLS False Start. Это расширение позволяет клиенту и серверу начать обмен зашифрованными данными сразу после установления метода шифрования, что сокращает установление соединения на одну итерацию сообщений. Об этом подробнее рассказано в пункте “TLS False Start”.
Алгоритмы шифрования
Для симметричного шифрования использовались разные алгоритмы. Первым был блочный
DES, разработанный компанией IBM. В США его утвердили в качестве стандарта в 70-х годах. В основе алгоритма лежит
с 16-ю циклами. Длина ключа составляет 56 бит, а блока данных — 64.
Развитием DES является алгоритм 3DES. Он создавался с целью совершенствования короткого ключа в алгоритме-прародителе. Размер ключа и количество циклов шифрования увеличилось в три раза, что снизило скорость работы, но повысило надежность.
Еще был блочный шифр RC2 с переменной длиной ключа, который работал быстрее DES, а его 128-битный ключ был сопоставим с 3DES по надежности. Потоковый шифр RC4 был намного быстрее блочных и строился на основе генератора псевдослучайных битов. Но сегодня все эти алгоритмы считаются небезопасными или устаревшими.
Самым современным признан стандарт AES, который официально заменил DES в 2002 году. Он основан на блочном алгоритме Rijndael и скорость его работы в 6 раз выше по сравнению с 3DES. Размер блока здесь равен 128 битам, а размер ключа — 128/192/256 битам, а количество раундов шифрования зависит от размера ключа и может составлять 10/12/14 соответственно.
Что касается асимметричного шифрования, то оно чаще всего строится на базе таких алгоритмов, как RSA, DSA или ECC. RSA (назван в честь авторов Rivest, Shamir и Adleman) используется и для шифрования, и для цифровой подписи. Алгоритм основан на сложности факторизации больших чисел и поддерживает все типы SSL-сертификатов.
DSA (Digital Signature Algorithm) используется только для создания цифровой подписи и основан на вычислительной сложности взятия логарифмов в конечных полях. По безопасности и производительности полностью сопоставим с RSA.
ECC (Elliptic Curve Cryptography) определяет пару ключей с помощью точек на кривой и используется только для цифровой подписи. Основным преимуществом алгоритма является более высокий уровень надежности при меньшей длине ключа (256-битный ECC-ключ сопоставим по надежности с 3072-битным RSA-ключом.
Более короткий ключ также влияет на время обработки данных, которое заметно сокращается. Этот факт и то, что алгоритм эффективно обрабатывает большое количество подключений, сделали его удобным инструментом для работы с мобильной связью. В SSL-сертификатах можно использовать сразу несколько методов шифрования для большей защиты.
Возобновление сессии tls
Как уже отмечалось ранее, полная процедура TLS Handshake является довольно длительной и дорогой с точки зрения вычислительных затрат. Поэтому была разработана процедура, которая позволяет возобновить ранее прерванное соединение на основе уже сконфигурированных данных.
Начиная с первой публичной версии протокола (SSL 2.0) сервер в рамках TLS Handshake (а именно первоначального сообщения ServerHello) может сгенерировать и отправить 32-байтный идентификатор сессии. Естественно, в таком случае у сервера хранится кэш сгенерированных идентификаторов и параметров сеанса для каждого клиента.
В свою очередь клиент хранит у себя присланный идентификатор и включает его (конечно, если он есть) в первоначальное сообщение ClientHello. Если и клиент, и сервер имеют идентичные идентификаторы сессии, то установка общего соединения происходит по упрощённому алгоритму, показанному на рисунке. Если нет, то требуется полная версия TLS Handshake.
Процедура возобновления сессии позволяет пропустить этап генерации симметричного ключа, что существенно повышает время установки соединения, но не влияет на его безопасность, так как используются ранее нескомпрометированные данные предыдущей сессии.
Однако здесь имеется практическое ограничение: так как сервер должен хранить данные обо всех открытых сессиях, это приводит к проблеме с популярными ресурсами, которые одновременно запрашиваются тысячами и миллионами клиентов.
Для обхода данной проблемы был разработан механизм «Session Ticket», который устраняет необходимость сохранять данные каждого клиента на сервере. Если клиент при первоначальной установке соединения указал, что он поддерживает эту технологию, то в сервер в ходе TLS Handshake отправляет клиенту так называемый Session Ticket – параметры сессии, зашифрованные закрытым ключом сервера.
При следующем возобновлении сессии, клиент вместе с ClientHello отправляет имеющийся у него Session Ticket. Таким образом, сервер избавлен от необходимости хранить данные о каждом соединении, но соединение по-прежнему безопасно, так как Session Ticket зашифрован ключом, известным только на сервере.
Как проверить сертификат tls удаленного smtp-сервера?
У нас есть сервер Exchange 2007, работающий на Windows Server 2008. Наш клиент использует почтовый сервер другого поставщика. Их политики безопасности требуют от нас использования принудительного TLS. До недавнего времени это работало нормально.
Теперь, когда Exchange пытается доставить почту на сервер клиента, он регистрирует следующее:
Не удалось установить безопасное подключение к защищенному домену домену «ourclient.com» на соединителе «Внешняя почта по умолчанию», поскольку не удалось выполнить проверку сертификата безопасности транспортного уровня (TLS) для ourclient.com со статусом «UntrustedRoot». Обратитесь к администратору ourclient.com для решения проблемы или удалите домен из списка защищенных доменов.
Удаление ourclient.com из TLSSendDomainSecureList приводит к успешной доставке сообщений с использованием условного TLS, но в лучшем случае это временное решение.
Клиент – чрезвычайно крупная, чувствительная к безопасности международная корпорация. Наш ИТ-специалист утверждает, что не знает о каких-либо изменениях в их сертификате TLS. Я неоднократно просил его указать полномочия, сгенерировавшие сертификат, чтобы я мог устранить ошибку проверки, но пока он не смог дать ответ. Насколько я знаю, наш клиент мог бы заменить свой действующий сертификат TLS на сертификат внутреннего центра сертификации.
Кто-нибудь знает способ вручную проверить сертификат TLS удаленного SMTP-сервера, как это можно сделать для сертификата удаленного сервера HTTPS в веб-браузере? Было бы очень полезно определить, кто выпустил сертификат, и сравнить эту информацию со списком доверенных корневых сертификатов на нашем сервере Exchange.
Маленький бонус
То, что не влезло.
На картинку тоже не всё влезло – тема очень большая, но на практике можно фокусироваться таким образом, чтобы на любом уровне понимать идею в целом и смочь разгрести что происходит, понять, что вам нужно доучить, что сейчас конкретно нужно узнать и всё вот это.
Эта картинка — про ключевые слова. Из литературы можно рекомендовать очень крутую статью на русском языке «Ключи, шифры, сообщения: как работает TLS» – прочитать целиком вряд ли удастся, но в качестве справочника пригодится. Открыл, нашел что надо, почитал, ключевые слова узнал, пошел в википедию и на английском прочитал (на русском почему-то плохо написано).
На английском написано отлично: идея, зачем, почему, ссылочки. Не знаешь, что такое HSTS – иди в википедию, там будет ссылочки на статьи для Патриков, то есть чайников. Еще на RFC, но это читать невозможно. Общий смысл станет понятен даже из самой статьи в Википедии.
Вот и всё! Вы молодцы 🙂
Не отозван ли сертификат?
Самая интересная вещь – мы дошли до нее, ура! Самая прикольная, самая неработающая 🙂
Если говорить кратко, то сейчас здесь во всей инфраструктуре TLS очень большие проблемы, потому что: не работает ничего. И эту проблему как раз и хотят решать тем, чтобы срок действия сертификата сделать очень маленьким. Когда нужно отзывать сертификат?
Чаще всего – когда ваш приватный ключ утек. Ваш приватный ключ утек – вы попали. Надо сертификат отозвать, потому что если не отозвать, тот кто украл ваш ключ, сможет подсовывать клиентам ваш сертификат и представляться вами. Надо сказать: чуваки, я поменял свой ключ – тот сертификат не действителен!
Если сделать время действия сертификата очень маленьким, то в принципе можно не отзывать, а подождать, когда он кончится. Отсюда все эти экстремальные предложения с минутами и часами. Ну, а если у тебя сертификат на 3 года, а ключ украли на второй день – то три года кто-то сможет представляться тобой.
Как же проверить, отозван сертификат или нет?
Рукопожатие
Когда пользователь заходит на веб-сайт, браузер запрашивает информацию о сертификате у сервера, который высылает копию SSL-сертификата с открытым ключом. Далее, браузер проверяет сертификат, название которого должно совпадать с именем веб-сайта.
Кроме того, проверяется дата действия сертификата и наличие корневого сертификата, выданного надежным центром сертификации. Если браузер доверяет сертификату, то он генерирует предварительный секрет (pre-master secret) сессии на основе открытого ключа, используя максимально высокий уровень шифрования, который поддерживают обе стороны.
Сервер расшифровывает предварительный секрет с помощью своего закрытого ключа, соглашается продолжить коммуникацию и создать общий секрет (master secret), используя определенный вид шифрования. Теперь обе стороны используют симметричный ключ, который действителен только для данной сессии. После ее завершения ключ уничтожается, а при следующем посещении сайта процесс рукопожатия запускается сначала.
Сertificate transparency
Итак, всё хорошо, но Google не был бы Google, если бы не придумал еще одну технологию конкретно для себя. Она называется Сertificate Transparency. Откуда что идет: Google очень беспокоится о том, чтобы кто-нибудь не выписал плохой сертификат на него самого – чтобы именно Google не пострадал от того, что кто-то там выписывает какие-то нехорошие сертификаты.
И вот с помощью Сertificate Transparency каждый владелец домена (и вообще кто угодно) может посмотреть, какие сертификаты на этот домен были выписаны. Дальше он может этот сертификат взять и с ним что-нибудь сделать. Например, проверить, хороший он или нет. Ну и возбудиться (или не возбудиться).
Это не только технология, но и набор процессов. То есть Google говорит: ребята, вот у нас есть Сertificate Transparency, мы в него записываем только нормальные сертификаты – такие, где цепочка есть, цепочка правильная и всё нормально. Мы можем время записи Сertificate Transparency Log запихать в сертификат, чтобы клиент мог четче посмотреть, что вот этот сертификат в Transparency Log должен быть тогда-то.
Мы гарантируем, что это вот эта штука не редактируема обратно (из-за того, что блокчейн) – ну то есть нельзя взять и подменить старые записи, можно только добавлять новые. И давайте, ребята, кто-нибудь из вас будет периодически ходить по этому логу, и проверять, что там всё нормально, а если что-то не так, говорить нам и мы будем это править. А другие ребята пусть держат у себя всё это, потому что надо, чтобы было много мощностей на вот эту вот штуку.
Тот ли тип использования?
Кроме проверки, тот ли это домен, не истёк ли срок годности и валидна ли подпись, из таких вещей, которые достаточно просто делаются, у нас еще есть пункт «тот ли тип использования».
Сертификаты бывают разные. То есть, если в Key Usage не указаны вот эти вот два параметра, то это – по идее! – должно влиять на то, как клиент с этим работает.
Key agreement – это как раз когда мы выписываем сеансовые ключи и договариваемся о них. Обычно вся эта коммуникация подписывается или шифруется вот этим вот публичным ключом, который чуть выше. Но если в key usage не прописан key agreement, то это означает, что ишьюер этого сертификата запрещает использовать этот сертификат для вот этого назначения.
Сейчас на практике это почти не встречается, то есть эти вещи у большинства сертификатов одинаковые, но тем не менее — в принципе могут быть и другие. И бывает, что сертификат НЕ подходит для чего-то. Для чего он подходит – написано здесь. Клиент должен это проверять.
Хеш и mac
Цель хеш-алгоритма —
все содержимое SSL-сертификата в битовую строку фиксированной длины. Для шифрования значения хеша применяется закрытый ключ центра сертификации, который включается в сертификат как подпись.
Хеш-алгоритм также использует величину, необходимую для проверки целостности передаваемых данных — MAC (message authentication code). MAC использует функцию отображения, чтобы представлять данные сообщения как фиксированное значение длины, а затем хеширует сообщение.
В протоколе TLS применяется HMAC (hashed message authentication code), который использует хеш-алгоритм сразу с общим секретным ключом. Здесь ключ прикрепляется к данным, и для подтверждения их подлинности обе стороны должны использовать одинаковые секретные ключи, что обеспечивает большую безопасность.
Все алгоритмы шифрования сегодня поддерживают алгоритм хеширования SHA2, чаще всего именно SHA-256. SHA-512 имеет похожую структуру, но в нем длина слова равна 64 бита (вместо 32), количество раундов в цикле равно 80 (вместо 64), а сообщение разбивается на блоки по 1024 бита (вместо 512 бит). Раньше для тех же целей применялся алгоритм SHA1 и MD5, но сегодня они считаются уязвимыми.
Разговоры об отказе от SHA1 велись достаточно давно, но в конце февраля алгоритм был официально взломан. Исследователям удалось добиться коллизии хешей, то есть одинакового хеша для двух разных файлов, что доказало небезопасность использования алгоритма для цифровых подписей.
