在 nginx 服务器中启用 SSL 压缩

在 nginx 服务器中启用 SSL 压缩

我一直在尝试演示 CRIME 攻击,这需要启用 SSL 压缩的浏览器和服务器。我购买了这样的浏览器,并在 localhost 上设置了一个 nginx HTTPS 服务器,并设置了我认为可以启用压缩的选项 (DEFLATE)。

这是我的nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # victim's bank server - HTTPS
    server {
        listen       443 ssl;
        #listen       81; # used to observe GET requests
        server_name  www.thebank.com thebank.com;
        ssl_certificate path/to/bank.crt;
        ssl_certificate_key path/to/bank.key;
        ssl_protocols SSLv2 SSLv3 TLSv1; #TLSv1.1 TLSv1.2;

        gzip         on;
        #gzip_types   *;
        #gzip_min_length 0;
        #gzip_comp_level 9;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   path/to/bank;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # evil server
    server {
        listen       80;
        server_name  evil.com www.evil.com;

        location / {
            root   path/to/evil;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
# ...
    include servers/*;
}

(免责声明:我从未使用过 nginx,因此如果这违反了某些惯例,我深表歉意,我基本上只是复制了提供的 conf 文件并根据需要对其进行了修改。这就是为什么有很多额外的评论。)

很难找到有关启用不安全功能的信息,但我认为该gzip on;线路启用了 SSL 压缩。然而,当我使用 Wireshark 监听环回流量时,我看到 DEFLATE 在客户端 hello 中被列为压缩方法,但仅null在服务器 hello 的压缩方法中。

我一直在使用旧版本的 nginx (1.1.6) 和 OpenSSL (0.9.8zb),希望这个能起作用。还试过 nginx 1.0.6,但还是不行。

有人能帮帮我吗?我觉得我已经尝试了一切。

编辑:即使使用 OpenSSL 0.9.7 和 nginx 1.0.6,Server Hello 仍然不显示压缩方法。

编辑:应@Steffen Ullrich 的要求,为了提供有关 OpenSSL 和 nginx 编译的更多详细信息,以下是我最新尝试的输出:

# install OpenSSL from source in /path/to/Downloads
wget https://www.openssl.org/source/old/0.9.x/openssl-0.9.8zb.tar.gz
tar xvf openssl-0.9.8zb.tar.gz
cd openssl-0.9.8zb
./config zlib
make
sudo make install

# check for zlib support
openssl version -a
# OpenSSL 0.9.8zb 6 Aug 2014
# built on: Fri Sep 27 01:59:42 EDT 2019
# platform: linux-x86_64
# options:  bn(64,64) md2(int) rc4(1x,char) des(idx,cisc,16,int) idea(int) blowfish(idx) 
# compiler: gcc -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
# OPENSSLDIR: "/usr/local/ssl"

# install nginx 1.0.6 from source with custom OpenSSL source
wget http://nginx.org/download/nginx-1.0.6.tar.gz
tar xvfz nginx-1.0.6.tar.gz
cd nginx-1.0.6
./configure --with-http_ssl_module --without-http_rewrite_module --with-openssl=/path/to/Downloads/openssl-0.9.8zb
sudo make
sudo make install

# check for zlib support
openssl version -a
# OpenSSL 0.9.8zb 6 Aug 2014
# built on: Fri Sep 27 02:57:12 EDT 2019
# platform: linux-x86_64
# options:  bn(64,64) md2(int) rc4(1x,char) des(idx,cisc,16,int) idea(int) blowfish(idx) 
# compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
# OPENSSLDIR: "/path/to/Downloads/openssl-0.9.8zb/.openssl/ssl"

答案1

根据此信息你需要一个旧的 nginx 和旧的 OpenSSL - 比你使用的要旧得多:

CRIME 攻击使用 SSL 压缩来发挥其魔力。默认情况下,nginx 1.1.6+/1.0.9+(如果使用 OpenSSL 1.0.0+)和 nginx 1.3.2+/1.2.2+(如果使用旧版本的 OpenSSL)中 SSL 压缩处于关闭状态。

因此,使用 nginx 1.1.5 或 nginx 1.0.8 应该可以工作,但前提是您还使用 OpenSSL 0.9.8。较新版本的 OpenSSL 默认禁用 TLS 压缩。请注意,此旧版本的 OpenSSL 不支持 TLS 1.1 或 TLS 1.2。

相关内容