启用 kTLS 时 nginx 数据损坏。知道原因吗?

启用 kTLS 时 nginx 数据损坏。知道原因吗?
  • 我正在使用启用了 kTLS 功能的 5.6 内核(如下所示):
CONFIG_TLS=y

CONFIG_TLS_DEVICE=y
  • 在安装支持 OpenSSL 的 nginx 时,我为 OpenSSL 启用了额外的功能“enable-ktls”(如下所示)。
./auto/configure --prefix=/root/nginx-ktls --with-http_ssl_module --with-openssl=/root/openssl --with-openssl-opt="enable-ktls" --with-cc-opt='-DOPENSSL_API_COMPAT=10101'
  • 我有以下 nginx 配置:
user root;

worker_processes  auto;

error_log  logs/error.log  info;

events {
    worker_connections  1024;
}

http {

    include                    mime.types;

    default_type               application/octet-stream;

    sendfile                   on;

    keepalive_timeout          65;
    ssl_session_timeout        5m;

    ssl_session_cache          shared:SSL:10m;

    ssl_certificate            /root/ssl-ktls/bin/server.crt;
    ssl_certificate_key        /root/ssl-ktls/bin/server.key;

    ssl_ciphers                AES128-GCM-SHA256;
    ssl_prefer_server_ciphers  on;

    ssl_protocols              TLSv1.2;

    server {
        listen           443 ssl;
        server_name      localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
  • 服务器上有一个 1GB 的文件,md5sum 为:abd476659314d0528f7752b9272e4d13

  • 从 PEER 机器上,当我建立 wget 连接并下载 1GB 文件时,我发现下载的文件已损坏。

wget --no-check-certificatehttps://10.193.185.196:443/DATA/1G

md5sum 1G : e3d6d4cec13a678154cc42955718e822

  • 由于内核和 OpenSSL 中启用了 kTLS 功能,因此 nginx 连接通过此路径。

grep TlsTxSw /proc/net/tls_stat

传输层安全性 1

  • 现在在 nginx 配置上,如果我将密码更改为“AES256-GCM-SHA384”,那么将不会采用 kTLS 路径,因为内核 kTLS 代码不支持它。

  • 如果我再次下载该文件,现在我可以看到正确的 md5sum。

有什么想法,为什么 kTLS 会导致 nginx 上的数据损坏?

答案1

据我所知,nginx 应该使用新的 openssl/kTLS 接口。您可以在此处找到 nginx 的示例补丁:
https://forum.nginx.org/read.php?29,283706,283834#msg-283834
https://forum.nginx.org/read.php?29,283833,283833#msg-283833

相关内容