在windows的nginx上实现sslkeylog留存:在window上编译Nginx

1,准备:

官网编译说明

2,修改Nginx源码

为了方便后续代码管理,适用git生成patch文件

  • 初始化一个临时 git 仓库
cd ~/nginx-orig
git init
git add .
git commit -m "original version"
  • 复制修改后文件替换掉旧文件,或者手动修改代码文件
  • 生成 patch
git diff > ~/sslkeylog.patch
  • 拿到patch文件后在新的源码环境下直接运行下面代码即可得到修改后的文件。
patch -Np1 -i 【patch文件路径】
例:patch -Np1 -i //home/user1/nginx-sslkeylog-master/nginx-patches/1.22.1.patch

源码中需要修改的点

①auto/cc/msvc文件

echo " + cl version: $NGX_MSVC_VER"

上面新增一行

NGX_MSVC_VER=19.29

版本号的查看如下图,打开vs命令行,执行cl


打开vs命令行
查看编译器版本

②auto/lib/openssl/makefile.msvc文件

修改前
修改后

③源码根目录(nginx-af7a3fb7558f)下新建objs/lib

lib下放入待编译模块

3,使用MSYS运行configure

auto/configure --with-cc=cl --sbin-path=nginx.exe --with-pcre=objs/lib/pcre-8.44 --with-zlib=objs/lib/zlib-1.3.1 --add-module=objs/lib/nginx-sslkeylog-master --with-http_ssl_module --with-openssl=objs/lib/openssl-1.1.1w --prefix=.
config结果

4,使用VS运行nmake

开始编译

编译完成

在objs文件夹下面找到nginx.exe可执行文件

5,去官网下载用于win下的可执行程序

下载对应版本的win版可执行程序

用编译得到的nginx.exe替换掉下载文件夹中的nginx.exe


用1替换掉2

6,config配置

最后在nginx的config文件( nginx1.22.1/conf/nginx.conf )中加入sslkeylog留存配置,然后运行可执行程序启动nginx

http {
...

  map $sslkeylog_shts $log_shts {
    '' '';
    default 'SERVER_HANDSHAKE_TRAFFIC_SECRET $sslkeylog_cr $sslkeylog_shts\n';
  }

  map $sslkeylog_chts $log_chts {
    '' '';
    default 'CLIENT_HANDSHAKE_TRAFFIC_SECRET $sslkeylog_cr $sslkeylog_chts\n';
  }

  map $sslkeylog_sts $log_sts {
    '' '';
    default 'SERVER_TRAFFIC_SECRET_0 $sslkeylog_cr $sslkeylog_sts\n';
  }

  map $sslkeylog_cts $log_cts {
    '' '';
    default 'CLIENT_TRAFFIC_SECRET_0 $sslkeylog_cr $sslkeylog_cts\n';
  }

  map $sslkeylog_es $log_es {
    '' '';
    default 'EXPORTER_SECRET $sslkeylog_cr $sslkeylog_es\n';
  }

  map $sslkeylog_ees $log_ees {
    '' '';
    default 'EARLY_EXPORTER_SECRET $sslkeylog_cr $sslkeylog_ees\n';
  }

  map $sslkeylog_cets $log_cets {
    '' '';
    default 'CLIENT_EARLY_TRAFFIC_SECRET $sslkeylog_cr $sslkeylog_cets\n';
  }

  map $ssl_protocol $keylog_lines {
    'TLSv1.3' "$log_cets$log_ees$log_shts$log_chts$log_es$log_sts$log_cts";
    '' '';
    default "CLIENT_RANDOM $sslkeylog_cr $sslkeylog_mk\n";
  }

  log_format sslkeylog escape=none '$keylog_lines';

  access_log  logs/sslkeys.log  sslkeylog;
...
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容