Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Maxim Dounin
mdounin на mdounin.ru
Ср Ноя 27 19:17:03 UTC 2019
Hello!
On Tue, Nov 26, 2019 at 06:42:24AM -0500, vahvarh wrote:
> Аналогичная задача (нужно писать ключи и дамп чтобы найти кто портит
> данные), но не помогает.
> На апаче сделали, оказалось с nginx приходит, нужно понять приходит ли так и
> на nginx или портится внутри него.
>
> На nginx машине сделали:
>
> systemctl edit nginx
> [Service]
> Environment=SSLKEYLOGFILE=/www/sslkeylog.txt
> Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so
>
> nginx.conf:
> env LD_PRELOAD=/usr/local/lib/libsslkeylog.so;
> env SSLKEYLOGFILE=/tmp/premaster.txt;
>
> systemctl stop nginx; systemctl start nginx
>
> ИТОГО:
> 1) lsof -n -p показывает что libsslkeylog загружен
> 2) файл /tmp/ не создает.
> 3) cat /proc/.../environ не показывает указанных env
>
> Возможно это из-за того что nginx старый (nginx version: nginx/1.10.3), но в
> документации ничего про такую фигню с env в старых версиях нет.
Содержимое /proc/.../environ ничего показывать и не будет, так как
environment очищается/устанавливается в уже запущенном рабочем
прочессе, и ядро этих изменений не увидит. Кроме того, на Linux'е
environment процесса используется для установки заголовка
процесса, так что в случае nginx'а там и исходное содержимое
затёрто.
Почему конкретно libsslkeylog загружается, но не работает - проще
всего разбираться, видимо, инструментируя libsslkeylog и/или
запуская всё под strace'ом.
Just in case, список пришедших в голову возможных причин:
- редактируется не тот nginx.conf;
- libsslkeylog собран не с той версией OpenSSL, с которой
собран/запускается nginx;
- у рабочих процессов nginx'а нет прав на запись в
/tmp/premaster.txt (в том числе при формальном наличии таковых
прав, e.g., из-за какого-нибудь SELinux'а).
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru