Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Спасибо! Помогло собрать SSLKEYLOG с NO_OPENSSL_102_SUPPORT. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285423,286358#msg-286358 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Аналогичная задача (нужно писать ключи и дамп чтобы найти кто портит данные), но не помогает. На апаче сделали, оказалось с 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 в старых версиях нет. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285423,286326#msg-286326 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Здравствуйте. > Hello! > > On Tue, Aug 27, 2019 at 11:50:18PM +0300, Pavel wrote: > >> Мы состоим в реестре организаторов распространения информации и >> поэтому обязаны предоставлять в надзорный орган ключи tls сессий. >> >> Для таких случаев существует механизм по перехвату вызовов библиотеки >> openssl: https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/ >> Суть простая - перед запуском демона, обрабатывающего TLS-соединения >> клиентов, через LD_PRELOAD подгружается эта библиотека и она >> сбрасывает в текстовый файл, указанный в переменой SSLKEYLOGFILE, ключи >> pre-master. >> >> Эта схема срабатывает с апачем, но с энжинксом ключи не пишутся. Нет >> ли идей или подсказок из-за чего это может быть и как вообще можно >> записать >> эти самые pre-master keys в энжинксе? > > [...] > >> [Service] >> Environment=SSLKEYLOGFILE=/tmp/premaster.txt >> Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so > > [...] > >> но тем не менее ключи в файл при обращении к энжинксу по https не >> пишутся. > > Скорее всего причина в том, что переменные > окружения очищаются при запуске, подробнее тут: > > http://nginx.org/r/env > Огромное спасибо! Ключи начали записываться когда добавил в nginx.conf env LD_PRELOAD=/usr/local/lib/libsslkeylog.so; env SSLKEYLOGFILE=/tmp/premaster.txt; ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Hello! On Tue, Aug 27, 2019 at 11:50:18PM +0300, Pavel wrote: > Мы состоим в реестре организаторов распространения информации и > поэтому обязаны предоставлять в надзорный орган ключи tls сессий. > > Для таких случаев существует механизм по перехвату вызовов библиотеки > openssl: https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/ > Суть простая - перед запуском демона, обрабатывающего TLS-соединения > клиентов, через LD_PRELOAD подгружается эта библиотека и она > сбрасывает в текстовый файл, указанный в переменой SSLKEYLOGFILE, ключи > pre-master. > > Эта схема срабатывает с апачем, но с энжинксом ключи не пишутся. Нет > ли идей или подсказок из-за чего это может быть и как вообще можно записать > эти самые pre-master keys в энжинксе? [...] > [Service] > Environment=SSLKEYLOGFILE=/tmp/premaster.txt > Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so [...] > но тем не менее ключи в файл при обращении к энжинксу по https не > пишутся. Скорее всего причина в том, что переменные окружения очищаются при запуске, подробнее тут: http://nginx.org/r/env -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Здравствуйте. Мы состоим в реестре организаторов распространения информации и поэтому обязаны предоставлять в надзорный орган ключи tls сессий. Для таких случаев существует механизм по перехвату вызовов библиотеки openssl: https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/ Суть простая - перед запуском демона, обрабатывающего TLS-соединения клиентов, через LD_PRELOAD подгружается эта библиотека и она сбрасывает в текстовый файл, указанный в переменой SSLKEYLOGFILE, ключи pre-master. Эта схема срабатывает с апачем, но с энжинксом ключи не пишутся. Нет ли идей или подсказок из-за чего это может быть и как вообще можно записать эти самые pre-master keys в энжинксе? Заранее спасибо. P.S. Пример файла с записанными ключами: # SSL key logfile generated by sslkeylog.c SERVER_HANDSHAKE_TRAFFIC_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 080b47a6fea27728f15c4cb70bc7478aa4e9bf5b554e8018d9462a48fff90e9514ca6dc410154c730 CLIENT_HANDSHAKE_TRAFFIC_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 883ec12435f3d53bc0e42f5fd0a26d006955064747786e21cda18bfa4e2b5fffe147860114036881d EXPORTER_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 267a950066d3c4bcc2fd3bb50287b045c213737d018f15c166dc82ce7eab5f4b4dcb3939bc11db1ec7c918a321b5d9f7 SERVER_TRAFFIC_SECRET_0 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da cdd2a750c617a721dc93595b99852a4a2436a4fb2f843617b51f7bc0de3b9a88faa5b2b5256fa4230df7fdf9f CLIENT_TRAFFIC_SECRET_0 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 0afb1f7f7c5d8fc9aefc8aae3111045d7e837e3f87de600fcf44a583f45a313d703235e6c80f51d1fa614d96f P.P.S. Запускаю энжинкс с этой библиотекой для записи ключей через systemd так: #cat /etc/systemd/system/nginx.service.d/override.conf [Service] Environment=SSLKEYLOGFILE=/tmp/premaster.txt Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so Через lsof видно, что эта библиотека для записи ключей энжиксом подгружается (здесь я проверяю и мастер и воркер): # lsof -n -p 10313 |grep ssl nginx 10313 root memREG 254,1 442984 3255 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 nginx 10313 root memREG 254,114224 20914 /usr/local/lib/libsslkeylog.so # lsof -n -p 10314 |grep ssl nginx 10314 www-data mem REG 254,1 442984 3255 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 nginx 10314 www-data mem REG 254,114224 20914 /usr/local/lib/libsslkeylog.so но тем не менее ключи в файл при обращении к энжинксу по https не пишутся. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru