Nginx este configurat ca echilibrator de încărcare și are instalat un certificat de server pentru a termina acordul de mână TLS pentru conexiunile MQTT. Funcționează atunci când extensiile TLS sunt incluse în clientHello în timpul strângerii de mână, dar există alți clienți care rulează cod vechi care nu trimit nicio extensie TLS în clientHello. În acest caz, am descoperit că Nginx va arunca erori ca în
SSL_do_handshake() a eșuat (SSL: error:14201044:SSL routines:tls_choose_sigalg:internal error) în timp ce SSL handshake, client: x.x.x.107, server: 0.0.0.0:8883
Aici este capturarea Wireshark
Mi se pare că Nginx se așteaptă cel puțin la extensia alorightms de semnătură. Întrebarea mea este dacă este posibil, Nginx poate fi configurat să accepte strângere de mână TLS atunci când clientul nu folosește extensii?
Configurația fluxului Nginx este aici (afișează numai referitor la TLS):
brokeri din amonte{
server 127.0.0.1:18831;
server 127.0.0.1:18832;
server 127.0.0.1:18833;
zona tcp_mem 64k;
hash $mqtt_client_id consistent;
}
Server {
asculta 8883 ssl;
preread_buffer_size 1k;
ssl_certificate /etc/nginx/certs/server.pem;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:128m;
ssl_session_tickets pe;
ssl_session_timeout 8h;
ssl_verify_client dezactivat;
ssl_prefer_server_ciphers dezactivat;
brokeri proxy_pass;
proxy_connect_timeout 5s;
access_log /var/log/nginx/mqtt_access.log mqtt;
error_log /var/log/nginx/mqtt_error.log depanare;
}
Iată captura wireshark când clienții trimit extensii în clientHello: