ssl Nginx TLS握手失败(40)对于旧的Android设备

pod7payv  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(90)

我正在使用官方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

gijlo24d

gijlo24d1#

从一个较新的nginx over debian docker镜像(nginx:1.23)开始,我通过设置TLS协议和系统Chiper Suites编辑了openssl系统配置(在容器内)/etc/ssl/openssl.cnf

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=0

字符串
然后这个问题与所使用的签名证书的密钥类型有关。我使用Let's Encrypt with * acme.sh * 作为续订方法。
我通过设置 --键长2048 来强制更新

相关问题