- PVSM.RU - https://www.pvsm.ru -
Как ранее сообщалось [1] на GeekTimes, EFF при поддержке Mozilla, Cisco, Akamai, IdenTrust и исследователей из Мичиганского университета (University of Michigan) создали новый некоммерческий центр сертификации (Certificate Authority) Let's Encrypt [2] [1] [3]. Целью проекта является ускорение перехода всемирной паутины от HTTP к HTTPS.
Как сказано в [2] [4], несмотря на то, что HTTP получил огромное распространение (что является признаком успешного протокола), его недостатком является небезопасность (открытость передаваемых данных) by-design. Всякий раз, когда пользователь подключается к сайту по HTTP, он подвержен ряду потенциальных проблем, таких как угон аккаунтов, перехват трафика, отслеживание государственными и коммерческими организациями, встраиванию зловредного кода (скриптов) в код страниц, цензуре.
Исследователи отмечают, что HTTPS, хотя не является панацеей, решает эти проблемы, поэтому переход на повсеместное его применение является важной задачей.
Проект планируется к запуску летом (в июне?) 2015. Let's Encrypt будет автоматически выпускать бесплатные сертификаты для любого запросившего их сайта. Планируется. что переключение с HTTP на HTTPS при использовании этого сервиса будет производится подачей всего одной команды или нажатия кнопки (облачные технологии — автоматизация в массы).
Здесь необходимо отметить, что самыми значительными проблемами при развёртывании HTTPS исследователи считают сложность, бюрократию и стоимость сертификатов, необходимых для работы HTTPS. Многие пользователи не раз сталкивались с предупреждениями и ошибками получаемыми в результате проблем с сертификатами.
Процедура получения сертификата бюрократична, сложна и является ведущей причиной того, что сайты продолжают использовать HTTP вместо HTTPS.
Одной из целей проекта Let's Encrypt является исключение лишних звеньев и автоматизация процесса, что, по неформальным замерам разработчиков даст снижение времени настройки шифрования с 1-3 часов до 20-30 секунд.
В основе проекта лежит ряд новаторских подходов и технологий для управления безопасной автоматической верификацией доменов и выпуска сертификатов. Для этого планируется использовать разработанный для этих целей протокол ACME между web-сервером и CA. Верификация будет, в том числе, использовать сервисы SSL Observatory (EFF), scans.io (MichU), Certificate Transparency (Google).
Для функционирования нового CA создаётся новая некоммерческая организация Internet Security Research Group (ISRG).
Любому, кто настраивал HTTPS с нуля известно, что получение сертификата не самая простая процедура (ходя, для кого-то уже отработанная и вполне понятная). Создатели проекта предполагают[3] [5], что с запуском проекта будет достаточно выполнить пару команд:
$ sudo apt-get install lets-encrypt
$ lets-encrypt example.com
После чего example.com [6] становится доступен.
Скрипт (набор скриптов) Let's Encrypt сделает следующее:
Всё это — без подтверждения по электронной почте, редактирования конфигурационных файлов, и бесплатно.
Для функционирования системы, на вашем сервере запускается агент, реализующий протокол ACME (Automatic Certificate Management Environment).
Процесс доказательства принадлежности домена выглядит следующим образом[4] [8]:
После авторизации агента, он может запросить, обновить или отозвать сертификаты для своего домена (доменов). Соответствующие сообщения должны быть подписаны авторизованной парой ключей.
Для получения сертификата для домена, агент формирует Certificate Signing Request (CSR) PKCS#10 с запросом к Let's Encrypt CA на выпуск сертификата для example.com с указанным открытым ключом. Как обычно, CSR подписывается закрытым ключом соответствующим отрытому ключу в запросе. Дополнительно, CSR подписывается авторизованным ключом домена, чтобы подтвердить CA легитимность запроса.
По получении запроса, CA верифицирует обе подписи. Если они верны, он выпускает сертификат для example.com с публичным ключом из CSR и возвращает его агенту.
Другие процедуры (обновление, отзыв) работают аналогичным образом.
Протокол ACME, подробно рассматривается в [5] [12]. Сертификаты в X.509 PKI (Public Key Infrastructure, инфраструра открытых ключей) используются в различных целях, наиболее значительной из которых является аутентификация доменных имён. Таким образом, центрам сертификации (Certificate Authority, CA) PKI «доверяют» удостоверение того, что сторона запрашивающая сертификат (апликант) легитимно представляет доменные имена, перечисленные в сертификате. В настоящее время, верификация производится посредством набора частных косвенных механизмов. Создатели ACME излагают способ непосредственного взаимодействия и автоматической верификации и выпуска сертификатов.
В устоявшейся практике [5] [12], получение сертификата состоит из ряда в основном ручных операций:
Основной идеей для ACME стало получение сертификатов для Web-сайтов (HTTPS [7] [14]). В этом случае, каждый сервер отвечает за один или более доменов, и процесс (описанный выше) предназначен для проверки этого соответствия.
Для различных целей возможно использование различных типов сертификатов[8] [15]:
Из них, DV, наверное, является наиболее популярным (здесь цена, минимальная трудоёмкость и достаточность являются главенствующими факторами). Важно, что для подтверждения на уровне DV все проверки могут быть выполнены CA автоматически, без участия оператора. Это и является ключевой особенностью решения на ACME — выпуск DV-сертификатов, сопоставимый по сложности с выпуском самоподписанного сертификата.
Для демонстрации того, что сервер (апликант) действительно авторизован отправлять сообщения от имени некоторого домена, CA работающий по протоколу ACME будет запрашивать решение набора задач (challenge) следующих типов (при этом подразумевается, что разрешение example.com в «подконтрольный» агенту узел должно быть через A или AAAA-запись):
Обмен клиента (агента) с сервером (CA) ACME осуществляется по протоколу HTTPS с обменом JSON [19]-сообщениями. Каждое сообщение ACME представляет собой словарь (dictionary), с обязательным полем типа (type), определяющего состав остальных полей сообщения. Все сообщения отправляются на общий HTTPS URI, зашитый в клиент. Клиент, в целом, ведёт себя как браузер, отправляя запросы методом POST, следуя редиректам (статусы 301, 302). Ответы, обычно, приходят со статусом 200, информация об ошибках кодируется в JSON-ответах с типом «error».
Создатели протокола, на мой взгляд, благоразумно предусмотрели тип ответа «defer», позволяющий заставить клиента подождать заданный интервал времени перед повторным запросом. Т.к. сервис, вероятно, будет весьма популярен, то возможность попросить клиента подождать, если сервер, например, перегружен и запрос поставлен в очередь позволит создателям Let's encrypt (и будущим сервисам на базе этого протокола) снизить затраты на инфраструктуру.
При обработке CSR (отправляемого в виде base-64 encoded; DER[10] [20]), сервер проверяет валидность полей перед выпуском сертификата. Предполагается, что CA будет отбрасывать из выпускаемого сертификата имена сущностей (Subject Alt Name), для которых у запрашивающего клиента (апликанта) нет авторизации. В ответ JSON, содержащий сертификат апликанта, включается собственно сертификат (base-64 encoded; DER) и цепочку родительских сертификатов в виде массива base64, DER, в порядке требуемом для TLS-рукопожатия по [11] [21], т.е. так, что первый сертификат в массиве подтверждает сертификат апликанта, второй сертификат массива подтверждает первый сертификат массива (каждый последующий подтверждает непосредственного предшественника; корневой сертификат может быть отброшен, т.к. подразумевается, что он уже есть на клиенте).
Клиентская часть написана на Python, есть в превью на GitHub: https://github.com/letsencrypt/lets-encrypt-preview [22] и он уже умеет настроить Apache (под nginx есть заглушка)
Серверная часть написана на JS, GitHub: https://github.com/letsencrypt/node-acme [23]
В вики проекта [24] можно найти информацию о том, как всё это попробовать на своём сервере.
Иллюстрации с letsencrypt.org [35].
Автор: askbow
Источник [36]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dns-2/75336
Ссылки в тексте:
[1] ранее сообщалось: http://geektimes.ru/post/241630/
[2] Let's Encrypt: https://letsencrypt.org/
[3] [1]: #ref_one
[4] [2]: #ref_two
[5] [3]: #ref_three
[6] example.com: https://example.com
[7] Image: https://habrastorage.org/files/e50/ba2/5c9/e50ba25c97c6416b9013f9c6ec0618cb.png
[8] [4]: #ref_four
[9] example.com: http://example.com
[10] Image: http://habrastorage.org/files/df2/0eb/57d/df20eb57d5df46cb9b711e796bddeb92.png
[11] Image: http://habrastorage.org/files/bc8/5fc/30d/bc85fc30de5a4b208f2d14866c6f789b.png
[12] [5]: #ref_five
[13] [6]: #ref_six
[14] [7]: #ref_seven
[15] [8]: #ref_eight
[16] [9]: #ref_nine
[17] example.com/magnificientalfanumerictoken: http://example.com/magnificientalfanumerictoken
[18] example.com/yetanothertoken: https://example.com/yetanothertoken
[19] JSON: https://en.wikipedia.org/wiki/JSON
[20] [10]: #ref_ten
[21] [11]: #ref_eleven
[22] https://github.com/letsencrypt/lets-encrypt-preview: https://github.com/letsencrypt/lets-encrypt-preview
[23] https://github.com/letsencrypt/node-acme : https://github.com/letsencrypt/node-acme
[24] вики проекта: https://github.com/letsencrypt/lets-encrypt-preview/wiki
[25] https://www.eff.org/deeplinks/2014/11/certificate-authority-encrypt-entire-web: https://www.eff.org/deeplinks/2014/11/certificate-authority-encrypt-entire-web
[26] https://letsencrypt.org/howitworks/: https://letsencrypt.org/howitworks/
[27] letsencrypt.org/howitworks/technology/: https://letsencrypt.org/howitworks/technology/
[28] https://github.com/letsencrypt/acme-spec/blob/master/draft-barnes-acme.md: https://github.com/letsencrypt/acme-spec/blob/master/draft-barnes-acme.md
[29] http://www.ietf.org/rfc/rfc2314.txt: http://www.ietf.org/rfc/rfc2314.txt
[30] http://tools.ietf.org/html/rfc2818: http://tools.ietf.org/html/rfc2818
[31] https://www.globalsign.com/ssl-information-center/types-of-ssl-certificate.html: https://www.globalsign.com/ssl-information-center/types-of-ssl-certificate.html
[32] https://cabforum.org/ev-code-signing-certificate-guidelines/: https://cabforum.org/ev-code-signing-certificate-guidelines/
[33] https://en.wikipedia.org/wiki/X.690#DER_encoding: https://en.wikipedia.org/wiki/X.690#DER_encoding
[34] http://tools.ietf.org/html/rfc5246: http://tools.ietf.org/html/rfc5246
[35] letsencrypt.org: https://letsencrypt.org
[36] Источник: http://habrahabr.ru/post/244037/
Нажмите здесь для печати.