- Что такое ocsp stapling?
- Что такое ocsp?
- Ascertia ocsp client tool
- Ocsp must-staple
- Ocsp stapling в iis
- Ocsp stapling в nginx
- Ocsp-клиент
- Ocsp-сервер
- Вопросы безопасности ocsp
- Вспомогательные вопросы при работе с ocsp
- Добиваемся ocsp stapling = yes для сертификатов от wosign на nginx
- Извлечение пакета цс
- Как определить время кэширования ocsp-ответа
- Команда openssl
- Концептуальная проблема зависимости от третьей стороны
- Кратко про ocsp
- Надо ли предварительно подготавливать ocsp-ответы
- Настраиваем и оптимизируем ocsp и связанные с ним технологии
- Настройка ocsp stapling на apache
- Настройка ocsp stapling на nginx
- Онлайн-тест qualys
- Проблема разглашения информации при ocsp-запросе
- Проверка поддержки ocsp stapling
- Тестирование ocsp stapling
Что такое ocsp stapling?
OCSP stapling – это расширение TLS/SSL, целью которого является повышение производительности SSL-переговоров при сохранении конфиденциальности посетителя.
Две основные проблемы OCSP – это приватность и большая нагрузка на серверы центров сертификации.
Чтобы связаться с центром сертификации (или ЦС) и подтвердить статус сертификата, OCSP требуется браузер. Это нарушает конфиденциальность, поскольку ЦС знает, какой именно сайт был открыт и кто именно получает доступ к нему.
Что такое ocsp?
OCSP (или Online Certificate Status Protocol) – это протокол, проверяющий, был ли отозван SSL-сертификат. Он был создан в качестве альтернативы CRL, с целью уменьшить время SSL-переговоров. В случае с CRL (Certificate Revocation List) браузер загружает список серийных номеров отозванных сертификатов и проверяет текущий сертификат, что увеличивает время SSL-переговоров. Используя OCSP, браузер посылает запрос к OCSP URL и получает ответ, содержащий состояние достоверности сертификата.
Ascertia ocsp client tool
Когда вы PKI занимаетесь на достаточно серьёзном уровне, тогда приходят более другие инструменты цена у которых отлична от нуля и которые являются уже Enterprise инструментами, либо у вас клиент работает под ОС, которая не поддерживает OCSP (все ОС до Windows Vista). Один из таких инструментов – OCSP Client Tool от Ascertia. Вот как он выглядит:
Как видите, интерфейс достаточно простой, но в нём уже видны некоторые возможности. Это возможность проверки множества сертификатов в пределах одного запроса. Это означает, что каждый сертификат не будет проверяться отдельным запросом, а все Serial ID сертификатов (в пределах одинакового издателя) будут помещены в один OCSP запрос и OCSP так же одним ответом выдаст статус по каждому сертификату. Т.е. запросов будет ровно столько, сколько различных издателей присуствует в этом окне.
Также возможно вместо индивидуального добавления сертификата добавлять цепочку сертификатов (certificate chain) в формате PKCS#7. Плюс, так же можно указать какой-то один OCSP респондер явно (ведь он может работать с несколькими CA), либо руководствоваться информацией об адресе OCSP респондера из поля AIA каждого сертификата. И ещё можно подписать сам запрос. Но нас больше будет интересовать, что именно мы можем проверить:
Мы можем проверить работу следующих компонентов:
- Nonce extension – это особый тип запроса, в который включается как ID проверяемого сертификата, так и уникальный номер запроса. OCSP респондер должен ответить клиенту сообщением, которое включает этот уникальный номер запроса. Плюс, это заставляет OCSP респондер игнорировать свой кеш, а выполнять полную сверку с CRL. По умолчанию в Windows-реализации OCSP Responder, такие запросы не поддерживаются, поскольку Windows-клиенты никогда не используют Nonce. Но вы можете включить поддержку таких запросов в консоли OCSP Responder.
- Add Service Locator extension – используется для извлечения AIA расширения и включения его в специальное поле запроса Service Locator.
- Check all certificates in PKCS#7 – при добавлении в основное окно не индвивидуальные сертификаты, а цепочку сертификатов, то эта опция разберёт эту цепочку на уникальные сертификаты.
- Verify signature on OCSP response – будет произведена проверка цифровой подписи OCSP-ответа с построением пути для этого сертификата до корневого CA.
- Сheck OCSP Responder authority to respond to CA – проверяется, что сертификат OCSP, которым подписан OCSP-ответ выдан тем же CA, которым выдан сам проверяемый сертификат. Этим проверяется, что OCSP респондер авторизован для конкретного CA для сообщения сведений о статусе сертификатов. Так же проверяется, что в EKU этого сертификата указано OCSP Signing.
Собственно и все основные настройки. Теперь нажимаем в основном окне Send Request и получаем много профита:
Собственно, тут всё видно, что к чему. В моём случае мой OCSP респондер прошёл все дополнительные проверки и попутно сообщил статус сертификата. В принципе, мне кажется, что данная утилита достаточно годная для проверки работоспособности и корректной настройки OCSP Responder.
надеюсь, этот пост поможет вам подружиться с безусловно хорошей вещью, как OCSP Responder и научиться проверять его и работу сопутствующих компонентов 🙂
Ocsp must-staple
OCSP Must-Staple (см. RFC 7633) – технология, нужная для дальнейшей оптимизации работы с TLS-серверами. Идея достаточно проста – в сертификат добавляется OID, который указывает на то, что к этому сертификату всегда должен идти “прикреплённый” OCSP-ответ.
Браузер, таким образом, запрашивая сертификат сразу же получает сигнал о том, что сервер должен к этому ответу приложить OCSP – или, если не приложит, то это ленивый сервер и с ним надо разорвать связь. То есть клиентский браузер чётко знает – “я сам ходить за OCSP даже пробовать не буду – мне должны прислать валидный OCSP-ответ”.
Ещё раз – именно должны. Ваш сервер, предъявляя такой сертификат, подписывается под то, что к TLS-ответу будет прикреплён OCSP.
Добавить OCSP Must-Staple в сертификат несложно – это OID 1.3.6.1.5.5.7.1.24, со значением 5. Сделать это надо на фазе создания CSR, т.е. запроса на сертификат. В случае OpenSSL это будет выглядеть так – в openssl.conf в раздел “параметры запроса” надо будет добавить вот такую строчку:
tlsfeature = status_request
(в случае старых версий OpenSSL, до 1.1.0, надо будет явно написать OID, т.к. там название status_request ещё не известно – и строчка будет 1.3.6.1.5.5.7.1.24 = DER:30:03:02:01:05).
Ocsp stapling в iis
Никак.
OCSP Stapling поддерживается начиная с NT 6.0 и детали его реализации в IIS, судя по всему, IIS унесёт с собой в могилу. Известно лишь то, что вопросы о “когда вы доделаете поддержку Multiple Certificate Status Request Extension?” подвисали в воздухе на форумах MSDN ещё в 2021 году. Что, в принципе, можно считать достаточным для принятия решения не особо использовать IIS для таких штук.
Что интересно, “неуправляемая” реализация OCSP Stapling в Microsoft IIS прошла все нужные сертификации американского Минобороны, о чём сообщается на специальной странице. Текущее состояние этой страницы довершает картину:
Ocsp stapling в nginx
В варианте с nginx всё куда как лучше.
Включается OCSP Stapling, выключенный по умолчанию, вот так:
ssl_stapling on;
Чтобы он (механизм OCSP Stapling) работал, нужна информация о “родительском” сертификате и прямое указание на DNS-сервер, через который будут разрешаться FQDN’ы из AIA-расширения.
Существует также возможность перекрыть адрес OCSP-сервера для конкретного сертификата – в разделе конфигурации про нужный сервер можно задать команду:
Ocsp-клиент
Поддержка анализа и обработки OCSP-записей в поле AIA у x.509v3-сертификатов появляется в Windows Vista; там же появляется и возможность управлять работой OCSP. Сделана она штатно, через механизм объектов групповой политики:
Нас будет интересовать блок настроек про выбор между OCSP и CRL (когда для конкретного сертификата доступны оба) и модификацию времени валидности данных об отзыве:
Шучу, не будет. Тонкая настройка “как именно выбирать между OCSP и CRL” нужна крайне редко – например, в сценарии “в локальной сети высокий уровень безопасности и используется IPsec transport mode для защиты определённых видов трафика” можно будет “заставлять” обращаться к закэшированному CRL (который заранее через ту же Group Policy раздаётся), экономя время на установку SA.
Основное у клиента – это “Умеет ли читать OCSP-поле” / “Умеет ли обрабатывать множественный ответ OCSP-responder’а”. Сейчас это, в общем, почти у всех.
Вроде всё хорошо – задачу с растущими CRL’ами решили. Но технологии не стоят на месте и на базе OCSP развиваются более интересные возможности.
Первая по важности из них – это OCSP Stapling.
Ocsp-сервер
Поднять свой OCSP-сервер для локальной инфраструктуры PKI нетрудно – он будет встроен в, например, ОС Windows Server начиная с NT 6.0 и будет называться OCSP Responder. Про его настройку и так подробно говорится на курсах, но вкратце там всё очень просто – вы обеспечиваете OCSP Responder’у доступ к свежему CRL-файлу нужного CA (или файлАМ, если их несколько), выдаёте сервису специфичный OCSP-сертификат и сервис функционирует.
Оптимизировать там, опять же, особенно нечего – этот сервис должен быть постоянно доступен и очень быстр, что вообще характерно для современных сервисов, так что перейдём к клиентской стороне.
Вопросы безопасности ocsp
Казалось бы – удивительное дело; речь ведь идёт о технологии, которая в подавляющем большинстве случаев ускоряет проверку отзыва сертификата. Вроде как никаких дополнительных вопросов безопасности здесь быть не должно. Однако они есть, и их надо учитывать.
Вспомогательные вопросы при работе с ocsp
Действия, нужные со стороны сервера и клиентов – примерно понятны. Что пригодится админу?
Добиваемся ocsp stapling = yes для сертификатов от wosign на nginx
Доброго времени суток, Хабражители.
Прочитав статьи
№1
и
№2
(про бесплатные SSL сертификаты от китайских друзей
WoSign
столкнулся с тем, что многие не могут добиться
OCSP stapling = Yes
для этих сертификатов.
Хочу рассказать как этого добился я.
Мы получили сертификат WoSign, залили на сервер.
И так, приступим.
Во-первых — получаем промежуточные сертификаты.
cd /path/to/your/ssl/
wget -O - https://www.startssl.com/certs/ca.pem | tee -a ca-certs.pem > /dev/null
wget -O - https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem > /dev/null
wget -O - http://aia.startssl.com/certs/ca.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
wget -O - http://aia1.wosign.com/ca1g2-server1-free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
wget -O - http://aia6.wosign.com/ca6.server1.free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
Во-вторых — в коняги Nginx’а добавляем
#########################################################
#
#
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate "/path/to/your/ssl/ca-certs.pem";
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
#
#
#########################################################
В-третьих — в коняги домена прописываем для 443 порта в раздел server следующее:
ssl on;
ssl_certificate /path/to/your/ssl/ssl.crt;
ssl_certificate_key /path/to/your/ssl/ssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'HIGH:!aNULL:!MD5:!kEDH';
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
И напоследок — перезапускаем Nginx
service nginx restart
Теперь при проверке на SSL-тестере мы видим результат А и включенный OCSP stapling.
Так же можно проверить это прямо на сервере командой
openssl s_client -connect YourDomain.com:443 -tls1 -tlsextdebug -status
Если в результате есть следующее,
Вот результаты теста моего блога
В комментариях к вышеупомянутым статьям были попытки (очень похожие на мою), но неуспешные.
Я не навязываю бесплатные сертификаты, но всё же если платить не хочется — пользуйтесь!
Спасибо.
Извлечение пакета цс
Извлеките root и промежуточный сертификат ЦС в формате PEM и сохраните их в одном файле. Чтобы получить root и промежуточный сертификат StartSSL, выполните:
Как определить время кэширования ocsp-ответа
Вы можете вручную посмотреть прикреплённый OCSP-ответ и увидеть срок годности. Например так:
Команда openssl
Данная команда выводит раздел, который говорит, соответствует ли этот веб-сервер данным OCSP. Этот раздел (найденный командой grep) выглядит так:
Концептуальная проблема зависимости от третьей стороны
В прекрасно мире высокотехнологичного будущего PKI занимает особое место – помимо ореола чистой науки и математики, PKI базируется на истинной независимости от сторонних участников в вопросе проверки подлинности. В самом деле, вы можете проверить сертификат на валидность лишь обладая нужным ПО, реализующим хорошо известные криптоалгоритмы.
Каждая проверка – что повторное вычисление хэша, что проверка цифровой подписи – упрётся в строгую математику, которая скажет, что “если хэши разные – то речь точно о разных входных данных”, или “если то, что обработано открытым ключом, не сходится добитово с тем, что было обработано закрытым – значит, это не пара ключей”.
Проверка на отзыв сертификата базировалась на том, что у вас есть файл со списком отозванных сертификатов. Файл подписан CA, которому вы доверяете. Вы проверяете наличие нужного сертификата в этом файле как вам хочется и когда вам хочется.
В случае же OCSP мы получаем посредника, который не показывает нам оригинальный CRL-файл. Он получает от нас запросы и отвечает, подтверждая лишь свою подлинность. Ответ OCSP responder’а не содержит подтверждения подлинности ответа – лишь то, что ответ получен в определённое время и не был прочитан/модифицирован по пути от вас, запрашивающего, до него, отвечающего.
Кратко про ocsp
У сертификатов x.509, как и у любых сущностей, есть жизненный цикл. Они рождаются, живут, и умирают. Всё, как у людей.
Надо ли предварительно подготавливать ocsp-ответы
В различных источниках бытует мнение о том, что OCSP – плохая технология, потому что самый первый клиент будет подключаться, а OCSP-ответа нет. Поэтому предлагаются схемы типа “давайте после старта веб-сервиса сами к себе обратимся, сымитировав самого первого клиента, чтобы этот вопрос был снят”.
Идея неплохая, но есть мнение, что проще ускорить процесс кэширования OCSP-ответа, а также грамотно настроить тайм-ауты. Тайм-ауты OCSP – это время, за которое веб-сервер, получив запрос от клиента на OCSP Stapling, должен сбегать к OCSP responder’у и принести этот ответ.
Соответственно, вопросы быстродействия сети, скорости разрешения DNS-имён и поиска рабочего OCSP responder’а из нескольких – весьма актуальны. Не бойтесь выставить тайм-ауты на 10 или даже 15 секунд – это не приведёт к замедлению работы с клиентом, это приведёт к снижению до нуля числа отбоев по причине “извини, братишка, не успел OCSP тебе передать – вот тебе TLS-ответ формата “уж как могу””.
В nginx существует возможность брать OCSP Stapling из файла – это делается через команду ssl_stapling_file и предполагает некий фоновый скрипт, который регулярно (это несложно, зная срок годности OCSP-ответа) ходит наружу и перезаписывает этот файл в случае получения удачного ответа.
Теперь чуток про безопасность OCSP.
Настраиваем и оптимизируем ocsp и связанные с ним технологии
Приступим.
Настройка ocsp stapling на apache
Отредактируйте файл виртуальных хостов SSL и внесите в директиву <VirtualHost></VirtualHost> следующий код:
Настройка ocsp stapling на nginx
Отредактируйте файл виртуального хоста и внесите в раздел server {} следующий блок кода:
Онлайн-тест qualys
Чтобы проверить работу OCSP stapling онлайн, перейдите на этот сайт. Когда тестирование будет завершено, найдите строку OCSP stapling в разделе Protocol Details.
Tags:
Проблема разглашения информации при ocsp-запросе
Вы отчитываетесь “какой я сертификат сейчас обрабатываю”, отправляя его идентификатор на OCSP-сервер. Он ведёт логи и имеет список “в какое время с какого адреса какой сертификат проверяли” – что, при доступности базы CA “какой сертификат с каким id я выдал какому домену”, даёт отличную картинку “вот на какие домены ходят с этого сетевого адреса”.
При приближении числа SSL/TLS-сайтов к 100% – картинка становится всё более чёткой. Да, а вкупе с тем, что для внутренних систем предприятия – от электронной почты до RDP-серверов – тоже принято запрашивать “нормальные сертификаты от внешних PKI” – то картинка прекрасно дополняется журналированием “на какие внутренние сервера, опубликованные снаружи, ходит”.
Проверка поддержки ocsp stapling
OCSP stapling поддерживается на:
Прежде чем приступить к настройке, проверьте версию веб-сервера с помощью следующих команд.
Apache:
apache2 -v
Nginx:
nginx -v
Тестирование ocsp stapling
Данный раздел описывает два способа проверки работы OCSP stapling: инструмент командной строки openssl и SSL-тест на Qualys.