我的问题与已经提到的问题非常相似: 强制 nginx 代理服务器使用特定的 SSL 协议
除了这里,解决方法是降低 SSL 版本,但就我而言并非如此。下面是我的拓扑。我试图在客户端和服务器(前端和后端(在 NGINX 术语中应该是上游))上模拟类似 F5 的 SSL 代理。
SSL 客户端---TLS1.3---->NGINX 代理--TLS1.3---> SSL 服务器
我的前端运行良好,TLS1.3 握手也很好,但我的上游也需要 TLS1.3,这就是我发现问题的地方。无论我在 NGINX conf 文件中设置什么,它总是将 TLS1.2 版本和相应的密码转发到真实服务器,而这些会被拒绝。如果我在服务器端使用 TLS1.2,则握手成功。
我甚至尝试通过在列表中提及 TLS1.3 来强制版本,但没有成功。
下面是我的 nginx 配置片段。
upstream pool_transparent {
zone test_pool_zone 64k;
server X.0.0.1:443;
server X.0.0.2:443;
server X.0.0.3:443;
server X.0.0.4:443;
}
server {
listen 443 ssl default_server;
status_zone test;
ssl_certificate certs/x.crt;
ssl_certificate_key certs/x.key;
ssl_protocols TLSv1.3;
ssl_ecdh_curve secp521r1:secp384r1:prime256v1:X25519;
#ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SH\ A256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass https://pool_transparent;
proxy_ssl_protocols TLSv1.3;
#proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
proxy_http_version 1.0;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
location @health_check {
proxy_pass https://pool_transparent;
proxy_set_header Host $host;
health_check uri=/ interval=10 fails=1 passes=1;
}
}
server {
listen 8080;
location /api {
limit_except GET {
auth_basic "NGINX Plus API";
auth_basic_user_file /home/rakesh/passwdfile;
}
api write=on;
#allow 0.0.0.0/0;
#deny all;
}
location = /dashboard.html {
root /usr/share/nginx/html;
}
location /swagger-ui {
root /usr/share/nginx/html;
}
}
任何帮助将非常感激。