我正在使用官方Docker映像运行nginx,我想为旧版Android设备启用一些端点。这些设备运行Android 4.3 JB或Android 4.4 KitKat。
从Android设备的Angular 来看,此异常在http调用后出现:
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb9d6d1a0: Failure in SSL library, usually a protocol error
2023-11-28 13:43:14.941 8763-8763 System.error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0xa3860990:0x00000000)
字符串
通过Wireshark捕获流量,我发现了以下行为:Android客户端发送SSL Hello,其中包含以下Cipher Suite:
的数据
服务器回复 Handshake failure 40 错误。
的
所以我认为服务器不支持客户端的密码套件。我尝试了很多配置,我报告了最后使用:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name myserver.com;
client_max_body_size 40M;
server_tokens off;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA@SECLEVEL=0;
access_log /var/log/nginx/host.access.log main;
location /api{
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mybackend:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
gzip on;
}
型
正如您在客户端Hello中所看到的,nginx ssl配置中也出现了一些Chiper套件。
我试着切换到旧的nginx图像,看看它是否可以依赖于一些默认值的变化。使用的版本,当写在这里,是nginx:1. 13。
更新1
日志错误将输出以下行:
2023/11/28 18:52:57 [info] 7#7: *1 SSL_do_handshake() failed (SSL: error:1417A0C1:SSL routines:tls_post_process_client_hello:no shared cipher) while SSL handshaking, client: 185.170.137.233, server: 0.0.0.0:443
型
更新2以下是服务器公开的Cipher Suites
有人知道为什么一些启用的密码丢失了吗?
谢谢你Nci
1条答案
按热度按时间gijlo24d1#
从一个较新的nginx over debian docker镜像(nginx:1.23)开始,我通过设置TLS协议和系统Chiper Suites编辑了openssl系统配置(在容器内)/etc/ssl/openssl.cnf
字符串
然后这个问题与所使用的签名证书的密钥类型有关。我使用Let's Encrypt with * acme.sh * 作为续订方法。
我通过设置 --键长2048 来强制更新