Перейти к содержанию

Fullchain-сертификаты и как их добыть

Материал из Wiki yaboard
Черновая версия Cтраница не завершена
Информация на этой странице не проверена до конца. Текст дорабатывается, обозначенные решения могут быть неполными или не совсем точными.

Что такое сертификаты безопасности?

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

Таких блоков в файле может быть один или больше, в зависимости от длины цепочки (каждый ключ или подпись в таких файлах - свой блок, обрамлённый строками BEGIN... END...):

Технически порядок блоков может быть любым, файл будет работоспособен.
Но неправильная последовательность снизит рейтинг SSLLabs вашего сайта (если он вам нужен; а для навыков Алисы этот фактор не имеет значения).


Сертификаты можно разделить на степени - или уровни - доверия.

  • Корневые сертификаты. Выпущены специальными удостоверяющими центрами, имеют наивысшую доверительность. Могут удостоверять собой любые другие виды сертификатов.
  • Промежуточные сертификаты. Любые виды цепочек сертификатов. Тоже имеют право удостоверять (подписывать) другие сертификаты.
  • Конечные сертификаты. Самая низкая степень доверия. Ими нельзя подписывать никакие другие сертификаты.
То есть, сертификаты составляют вертикальные цепочки, в которых более высоким сертификатом удостоверяется (подписывается) более низкий. 
Если вернёмся к предыдущем скриншоту, то увидим, что правильный порядок блоков - снизу вверх по цепочке (сначала сертификат домена, затем промежуточные сертификаты по восходящей и, наконец, корневой сертификат).


Теперь легко понятны ещё два термина:

  • fullchain ("полная цепочка") сертификат - тот, который хранит всю цепочку, включая корневой и конечный сертификаты (и все промежуточные, если они участвуют).
    Физически fullchain-сертификат - тот же текстовый файл, который хранит все подписи, участвующие в цепочке.
  • самозаверенный (чаще говорят "самоподписанный") сертификат - тот, который удостоверяет сам себя на манер корневого сертификата, но при этом, конечно, им не является.
    Кроме того, из-за того, что самоподписанные сертификаты невозможно отозвать, возникают различные риски ("атака посредника" итд).
Самоподписанные сертификаты имеют самую низкую надёжность и их использование недопустимо, когда требуется обеспечить безопасный внешний обмен данными.
В изолированных сетях самоподписанные сертификаты вполне возможны.


Для цифровой аутентификации, в том числе подписи к сертификатам существует два вида ключей:

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


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

И напоследок, у сертификата есть срок действия, после истечения которого пользоваться им не получится. Он может быть отозван и досрочно по каким-то причинам (например, скомпрометирован приватный ключ издателя или владельца конечного сертификата). Сертификат, у которого всё в порядке, называют валидным (действительным) - и наоборот.

Сертификаты в навыках Алисы

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

  • обязательная работа через HTTPS,
  • обязательное использование fullchain-сертификатов.

Благо, сегодня вряд ли удастся встретить хостинг без поддержки SSL/HTTPS, зато бесплатных сертификатов в достатке (да, те самые Lets' Encrypt, SSL For Free, CAcert итд).

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

Вариантов и инструкций в Интернете достаточно много. В том числе у нас на вики в статье " Алиса управляет Умным домом через Node-RED".

В следующих разделах - краткие инструкции по самым популярным сервисам:

Lets' Encrypt и certbot

Потребуется установить программу certbot. Под *nix- системами это сделать проще, но под Windows тоже не потребуется сверхъестественных усилий.

Инструкции могут сильно отличаться от версии операционной системы, одной страницей тут не обойтись, лучше подобрать подходящий для вашей среды вариант в Интернете. 
Да и задача этой инструкции в другом: дать общее представление о полных цепочках и объяснить, что делать со сгенерированными файлами, чтобы их получить. 

Предположим, что certbot у вас установлен. Что дальше? Запускаем несколько консольных команд.

Зарегистрироваться:

certbot register -m emailадминистратора@вашдомен.com

Сгенерировать сертификат:

certbot certonly --webroot -w /var/www/папкасервера -d вашдомен.com -d www.вашдомен.com

Если опасаетесь, что что-то не так и хотите сначала потренироваться, добавьте опцию --dry-run (режим эмуляции для отладки ошибок)

certbot certonly --dry-run --webroot -w /var/www/папкасервера -d вашдомен.com -d www.вашдомен.com

Готово! У вас появятся 4 файла (их расположение также сильно зависит от вашей операционной системы):

  1. cert.pem (конечный сертификат),
  2. chain.pem (цепочка доверия от корневого сертификата, не включающая конечный),
  3. fullchain.pem (нужная нам полная цепочка, включая конечный сертификат, по сути это сложение cert.pem+chain.pem),
  4. privkey.pem (приватный ключ конечного сертификата, который никому нельзя ни показывать, ни отсылать).

Для веб-сервера необходимы два из них: fullchain.pem и privkey.pem.

Ещё несколько полезных команд certbot

Проверка и обновление сертификатов (полезно поставить запуск этой команды по расписанию):

certbot -q renew

Для проверки и обновления также есть тестовый режим (чтобы убедиться. что ваши домены будут обновляться):

certbot renew --dry-run

Добавление новых доменов и поддоменов к сертификату:

certbot certonly --webroot -w /var/www/папкасервера --expand -d вашдомен.com -d www.вашдомен.com -d www.вашдомен.ru

Изменение адреса администратора:

certbot register --update-registration -m newemail@вашдомен.ru

SSL For Free

Получить сертификат через онлайн-сервис намного быстрее и проще, ничего устанавливать не нужно:

  1. Регистрация на сайте https://sslforfree.com/
  2. Выбор настроек (обычно ничего трогать не нужно, просто жмите "Next Step")
  3. Подтверждение прав на домен, для которого получаете сертификат, любым из способов:
    • на почту его владельца (список готовый, посторонний адрес вписать не получится) - вам должна быть доступен один из почтовых ящиков.
    • изменением полей DNS (CNAME) - для новичков этот способ самый запутанный, но не требует доступности почты и http.
    • скачиванием подтверждающего файла и размещением его в подпапке сайта - к домену должен быть http-доступ из Интернета в момент проверки.
  4. После подтверждения останется выбрать формат: предлагается список шаблонов (Default, Tomcat, AWS, cPanel, Google App, Heroku. nginx, Plesk, итд).
  5. сертификат готов!


Сервис SSL For Free создаёт три файла:

  • ca_bundle.crt (цепочка, исключая конечный сертификат)
  • certificate.crt (сам конечный сертификат)
  • private.key (приватный ключ конечного сертификата, который никому нельзя ни показывать, ни отсылать).

Получить fullchain можно, склеив в любом текстовом редакторе два первых файла. Порядок блоков, как мы помним, значения не имеет, но в интернетах встречается рекомендация "сначала сертификат", можно последовать ей.

Вероятно, вам дополнительно понадобится найти файл root, содержащий подписи корневых удостоверяющих центров. 
Средствами Windows, например, при помощи штатной certutil можно получить корневые сертификаты в формате sst ("certutil.exe -generateSSTFromWU roots.sst"), а распаковкой регулярно обновляемого файла authrootstl.cab - в формате stl.

Как понять, что всё хорошо

Очень просто: вы скопировали файлы сертификатов в нужную папку, указали вашему веб-серверу пути к ним, и всё работает! :)

Как понять, что всё плохо

При попытке верифицироваться с неполноценным сертификатом вы получите сообщение "Endpoint URL: Некорректный SSL-сертификат".

Возвращайтесь к началу инструкции, по которой вы его выпускали и проверьте, всё ли вы сделали правильно. Сравните с любой другой инструкцией из Интернета. Возможно, где-то вкралась ошибка, или другое объяснение окажется для вас более полным и понятным.

Как проверить сертификат на валидность

Онлайн

Вот несколько популярных сервисов для онлайн-проверки валидности сертификатов:

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

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

Офлайн (без доступа к Интернету)

Да, в изолированных сетях и сетях без доступа к Интернету тоже бывают нужны SSL-сертификаты. И значит, должен быть способ их проверки без выхода в Интернет.

Такой способ есть, использует криптографический пакет OpenSSL (что-то вроде "openssl x509 -in myserver.crt -text -noout", "openssl x509 -noout -modulus -in server.crt | openssl md5", "openssl verify -CAfile RootCert.pem -untrusted Intermediate.pem UserCert.pem", итд).