main

О ssl-сертификатах

Недавно меня спросили - почему на сайте нет ssl-сертификата? На этот вопрос очень простой ответ - потому что он на нём нахер не нужен. Развёрнутый ответ под катом.

Этот сайт - полностью публичен, статичен и неинтерактивен. Здесь нечего защищать ssl-ем, потому что на сайт ничего не передаётся кроме http-запросов. Здесь нет никакой крамолы, прочтение которой вы могли бы хотеть скрыть.

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


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

Думаю очевидно, что нынешняя система сертификатов - это в чистом виде бизнес по продаже воздуха. Любой из сотен центров сертификации может выписать серт на абсолютно любой домен. А типовое "безопасное" приложение, сверяющееся с ca_root_nss его радостно сожрёт и подвоха не заметит. Приложения, сверяющие хотя бы корневой сертификат, типа openvpn'а - скорее исключение из правил.

Даже после серии громких скандалов, связанных с подделкой сертификатов и липовой "верификацией", центры, уличённые в этом исключаются из доверенных с большой неохотой. 1, 2, 3, 4, 5, 6, 7 Насколько я знаю, из списка выкинули только WoSign. Об уголовном наказании владельцев и организаторов и говорить не приходится.

И за эту "безопасность" с вас просят вполне чувствительные деньги. За altname, за wildcard, за ваше имя в сертификате, прописанное в отдельном поле. За перевыпуск, за кроссподпись, за всё что можно придумать.

В последнее время даже самые тупые начали что-то такое подозревать, задавать неудобные вопросы типа "за что мы платим деньги", и на "замену" придумали1 ...letsencrypt. Который не решает НИ ОДНОЙ архитектурной проблемы существующий системы, но маскирует их магическим словом ХАЛЯВА. "Ха-ха, смотрите эти лохи до сих пор платят за сертификаты! Но я-то не такой, я-то умный, мне - бесплатно."2 Ну да, на какое-то время от продавцов воздуха отстанут. Только проблему это не снимает, а откладывает.

А вместе с тем, мы получаем:

  • малый срок жизни сертификата. Можно оперативно нагнуть любого, кто не нравится владельцу Letsencrypt'а. Передаю привет любителям хранить всё в облаке, и свидетелей секты святой уверенности, что их никогда-никогда не нагнут. В этот момент особенно активно кивают головой любители музыки из вконтакта.
  • "невыкидываемый" из ca_root_nss центр сертификации. Ну в самом деле кто его выкинет, если на него полинтернета завязано. Халява же. Это как ajax.googleapis.com на полдня положить - тоже всё раком встанет.
  • необходимость постоянно следить за обновлением сертификата. Потенциальное закручивание гаек в процедуре перевыдачи. Например поинтересуются вашим телефоном и паспортными данными. Вы же не будете судорожно вспоминать, где, когда и кому вы настраивали этот долбаный летсэнкрипт. А часики-то тикают. Проще выдать запрошенные данные. А потом ещё и ещё.

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

Также, неплохо бы иметь возможность проверять серт к dns через SRV-запись, наподобие DKIM. Правда для этого нужно защитить dns от подмены. DNSSec, dnscrypt, что-нибудь из этой оперы.

P.S. Что-то я сегодня очень зол и саркастичен. Наверное не выспался.


  1. Какие именно жидорептилоиды придумали и с чьей подачи - тема интересная, но выходит за рамки данной статьи. ↩

  2. Срезать такого "прогрессивного" очень просто - достаточно спросить его, есть ли поддержка wildcardов или какой нынче из десятков acme-клиентов рабочий. Если "прогрессивных" поблизости больше одного, мгновенно возникает срач по лекалам "выбора лучшего дистрибутива линукса". ↩