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