- 我正在使用启用了 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