OCSP stapling in Nginx >=1.3.7
Gena Makhomed
gmm на csdoc.com
Вт Сен 11 19:00:05 UTC 2018
On 11.09.2018 18:59, Maxim Dounin wrote:
>>>>> Лучше всего - сделать так, чтобы OpenSSL научился проверять
>>>>> OCSP-ответы не полной цепочкой сертификатов вплоть до доверенного
>>>>> root'а, а ровно так, как и должно быть по стандарту - с помощью
>>>>> одного только сертификата issuer'а. Тогда проблема исчезнет.
[...]
>> https://www.openssl.org/docs/manmaster/man3/OCSP_basic_verify.html
>> там говорится о флаге OCSP_TRUSTOTHER, смысл примерно такой:
>>
>> : ... or if the signer certificate was found in certs and
>> : the flags contain OCSP_TRUSTOTHER. Otherwise the function
>> : continues by validating the signer certificate.
>>
>> О том же написано и в CHANGELOG:
>>
>> *) New OCSP verify flag OCSP_TRUSTOTHER. When set the "other"
>> certificates passed by the function are trusted implicitly.
>> If any of them signed the response then it is assumed
>> to be valid and is not verified.
>>
>> Насколько я понимаю, это и есть та самая проверка с помощью
>> одного только сертификата issuer'а, о которой Вы говорите?
>>
>> Если это то, что надо, то сейчас уже ничто не мешает сделать
>> в nginx директиву ocsp_stapling_verify включенной по-умолчанию?
>> И для ее работы не нужно будет прописывать ssl_trusted_certificate?
> В зависимости от того, каким сертификатом подписан OCSP-ответ -
> этого может быть достаточно или нет. RFC 6960 допускает два
> варианта подписи в OCSP-ответах:
> - issuer подписывает OCSP-ответ сам; или
> - issuer выпускает сертификат, которым подписываются OCSP-ответы
> (и этот сертификат включается в OCSP-ответ).
На самом деле - там три варианта, вот еще третий:
- a Trusted Responder whose public key is trusted by the requestor
Подробности здесь: https://tools.ietf.org/html/rfc6960#section-2.2
> В обоих случаях для проверки OCSP-ответа достаточно знать
> issuer'а, однако второй случай в OpenSSL не работает (впрочем, я
> давно не порверял; но если верить "документации", в этом месте
> ничего не зименилось). При этом по понятным причинам мало кто
> использует собственно CA для подписи OCSP-ответов, соответственно
> не работает это приблизительно всегда.
В RFC 6960 написано по поводу сертификата из второго случая:
: This certificate MUST be issued directly
: by the CA that is identified in the request.
https://tools.ietf.org/html/rfc6960#section-4.2.2.2
Как это может не работать в OpenSSL, если сертификат, которым
подписываются OCSP-ответы является валидным и проверка идет
полной цепочкой сертификатов вплоть до доверенного root'а?
Кстати, мне так и не удалось найти в стандарте RFC 6960 требования
проверять OCSP-ответ с помощью одного только сертификата issuer'а.
>> ocsp_stapling_verify в nginx можно без проблем использовать
>> и прямо сейчас, только для этого надо прописать дополнительно
>> ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
>>
>> Насколько я понял из предыдущего обсуждения, нет разумных причин,
>> чтобы выключать использование OCSP stapling и ocsp_stapling_verify.
>>
>> И вместе с тем, есть причины, чтобы их включать:
>> OCSP stapling - сайт у клиентов будет открываться быстрее.
>> ocsp_stapling_verify - не будет проблем с неразумными браузерами.
> Про "быстрее" - есть нюансы. В частности, OCSP-ответ отправляется
> клиенту, пытающемуся использовать OCSP stapling, в каждом
> SSL handshake'е (а это местами может быть больно с точки зрения latency, не
> говоря уже про трафик), в то время как в значительной части
> случаев он клиенту на самом деле не нужен (например, уже есть в
> кэше).
Открытие сайта по HTTPS без OCSP Stapling подразумевает,
что браузер сам будет проверять не отозван ли сертификат сервера.
Клиент в это время будет сидеть перед монитором и ждать открытия сайта.
https://blog.cloudflare.com/ocsp-stapling-how-cloudflare-just-made-ssl-30/
OCSP Stapling: How CloudFlare Just Made SSL 30% Faster
> Про verify - тоже есть нюансы. Дискуссия, если я её правильно
> понял, как раз о том, что включать verify обходится дороже с
> административной точки зрения, чем хотелось бы. При этом плюсы -
> призрачны, ибо защищают от атак, которых на практике не бывает
> (а если бы они были - браузеры бы давно исправились).
В начале дискуссии вопрос был о том, почему для того чтобы директива
ssl_stapling_verify on; нормально работала необходимо также прописывать
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
если содержимое файла chain.pem можно получить из файла fullchain.pem
выбросив оттуда первый сертификат, который является сертификатом сайта?
Кроме необходимости прописывать совсем лишние директивы в конфиге
есть и более серьезная проблема - директива ssl_trusted_certificate
сейчас исполняет две совершенно различные роли вместо одной, как раньше.
> Единственное несомненное преимущество OCSP stapling'а - это
> меньшая нагрузка на инфраструктуру CA
И на 30% более быстрое открытие сайта клиентом,
если на сервере используется OCSP stapling.
P.S.
Сегодня вышел релиз OpenSSL 1.1.1 с поддержкой TLSv1.3
https://www.openssl.org/blog/blog/2018/09/11/release111/
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru