OCSP stapling in Nginx >=1.3.7

Maxim Dounin mdounin на mdounin.ru
Пн Сен 10 13:04:19 UTC 2018


Hello!

On Thu, Sep 06, 2018 at 06:26:25PM +0300, Gena Makhomed wrote:

> Здравствуйте, All!
> 
> Если с помощью Let's Encrypt сделать SSL-сертификат
> для домена,например, example.com то в файле
> /etc/letsencrypt/live/example.com/README
> будет такая информация:
> 
> `chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
> 
> Чтобы nginx использовал файл chain.pem для OCSP stapling
> необходимо прописать в конфиге
> 
>   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
>   ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
>   ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
> 
>   ssl_stapling on;
>   ssl_stapling_verify on;
>   resolver 8.8.8.8 1.1.1.1 9.9.9.9 ipv6=off;
> 
> я правильно понимаю?

Just a side note: использование сторонних DNS-серверов - это 
плохое решение.  Цитируя документацию:

: Для предотвращения DNS-спуфинга рекомендуется использовать 
: DNS-серверы в защищённой доверенной локальной сети.

> Смущает тот факт, что если закомментировать
> в конфиге директиву ssl_trusted_certificate
> - никаких предупреждений не выводится во время
> тестирования конфигурации и никаких сообщений
> не пишется в лог во время systemctl reload nginx

Верификация OCSP-ответов - происходит только в момент собственно 
получения этих ответов.  Соответственно каких-либо ошибок в логе 
стоит ожидать только после того, как к соответствующему server'у 
будет установлено первое соединение с запросом stapling'а.

Кроме того, в некоторых случаях для проверки может хватить 
сертификатов, уже присутствующих в цепочке сертификата (по идее 
должно хватать issuer cert, которые есть в цепочке почти всегда, 
но, к сожалению, соответствующие функции в OpenSSL, cкажем так, 
оставляют желать - и это, собственно, основная причина, почему 
ssl_stapling_verify не используется по умолчанию).

> Насколько я понимаю, ssl_stapling_verify on
> следует включать всегда, потому что общение
> с OCSP сервером происходит по протоколу HTTP?
> По крайней мере, в самом сертификате написано:
> OCSP: URI: http://ocsp.int-x3.letsencrypt.org

Да, общение с OCSP-сервером происходит по HTTP.  Но на самом деле 
это мало влияет на то, следует ли использовать ssl_stapling_verify 
или нет - самому nginx'у всё равно, что написано в OCSP-ответе.  
Вопрос в первую очередь в поведении браузеров.

Когда я последний углублялся в тему - Firefox остро реагировал на 
некорректные OCSP-ответы в стаплинге, не пытаясь самостоятельно 
перезапросить OCSP-ответ с OCSP-сервера, и это естественным 
образом приводило к тому, что подсунув серверу некорректный 
OCSP-ответ - можно было выключить его для всех пользователей 
Firefox'а[1].  Что, впрочем, не мешало Apache не иметь даже 
возможности для верификации OCSP-ответов.  Не в курсе, изменилось 
ли с тех пор что-нибудь.

[1] https://trac.nginx.org/nginx/ticket/425#comment:2

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru