4.8 KiB
Retetele de remediere go si nginx, masurate cap la cap, 2026-10-18 04:28Z-04:31Z
Pana azi remediere.mjs spunea despre profilul nginx "the server directive from the nginx documentation, not measured by us on a
real nginx" si despre go "from the Go 1.24 release notes; not measured by us (the Go on the test machine is 1.22)". Masurat azi, cu
EXACT fragmentele pe care le scrie reteta pentru hndl-exposed + tls12-accepted + hsts-missing (setarile: grupurile
X25519MLKEM768:X25519, versiunea minima 1.3, HSTS un an), fiecare server pornit pe 127.0.0.1 si sondat cu Node 24 (tls-sonda.mjs:
o strangere de mana reala cu grupurile oferite si, optional, cu versiunea maxima) si cu curl -k pentru antet:
Go (go/main.go, laptop) |
nginx (masoara-nginx-rpc2.sh, container pe rpc2) |
|
|---|---|---|
| serverul | Go 1.26.5 windows/amd64, &tls.Config{MinVersion: tls.VersionTLS13, CurvePreferences: []tls.CurveID{tls.X25519MLKEM768, tls.X25519}}, w.Header().Set("Strict-Transport-Security", "max-age=31536000") |
nginx 1.31.7 din nginx:alpine, "built with OpenSSL 3.5.8 (running with OpenSSL 3.5.9)"; ssl_ecdh_curve X25519MLKEM768:X25519; ssl_protocols TLSv1.3; add_header Strict-Transport-Security "max-age=31536000" always;; nginx -t ok |
client care ofera numai X25519MLKEM768 |
reusit (TLSv1.3, TLS_AES_128_GCM_SHA256) | reusit (TLSv1.3, grup raportat X25519MLKEM768) |
client care ofera numai X25519 (rezerva din reteta) |
reusit, grup X25519 |
reusit, grup X25519 |
client X25519MLKEM768:X25519 |
reusit | reusit, grupul ales X25519MLKEM768 |
| client TLS 1.2 | refuzat ERR_SSL_TLSV1_ALERT_PROTOCOL_VERSION |
refuzat ERR_SSL_TLSV1_ALERT_PROTOCOL_VERSION |
| HSTS | Strict-Transport-Security: max-age=31536000 |
Strict-Transport-Security: max-age=31536000 |
scanerul AERE pe server (scaneaza-local.mjs, scaneazaAdresa pe 127.0.0.1) |
pqKeyExchange X25519MLKEM768, prefersPqWhenOffered true, tls12Accepted false, hsts true; scor 70 numai din certificatul de proba (autosemnat, 2 zile: cert-expiring, chain-untrusted) |
NEMASURAT cu scanerul (modulul nu e instalat pe rpc2 in forma importabila); sondele si curl-ul acopera aceleasi fapte |
| curatenie | serverul oprit, binarul sters | container si imagine sterse; RPC-ul local 11 -> 13 ms |
Ce NU s-a masurat la 04:31Z: Apache si HAProxy (masurate apoi la 05:18Z-05:25Z, mai jos), un nginx de productie cu configuratia
lui intreaga (aici un singur server {} de proba), Go sub Windows numai (Linux NEMASURAT; Go-ul din WSL e 1.22, sub 1.24), clienti
reali (browsere) spre aceste servere. Jurnalele: masoara-go.log, masoara-nginx.log.
Apache si HAProxy, masurate 2026-10-18 05:18Z-05:25Z (masoara-apache-haproxy-rpc2.sh, masoara-haproxy2-rpc2.sh)
Aceleasi conditii: containere pe rpc2 (httpd:alpine, haproxy:alpine, OpenSSL-ul lui Alpine), publicate NUMAI pe 127.0.0.1, EXACT
fragmentele retetei, aceeasi sonda, curatenie la sfarsit (containere si imagini sterse, RPC-ul local 13 -> 10 ms).
Apache (httpd:alpine) |
HAProxy (haproxy:alpine) |
|
|---|---|---|
| serverul | Apache/2.4.69 (Unix) OpenSSL/3.5.9 (randul de pornire AH00489 din jurnal, chiar preconditia retetei); httpd -t: Syntax OK; SSLOpenSSLConfCmd Groups X25519MLKEM768:X25519, SSLProtocol -all +TLSv1.3, Header always set Strict-Transport-Security "max-age=31536000" intr-un <VirtualHost *:8447> |
HAProxy 3.4.7 (2026-10-14), "Built with / Running on SSL library version : OpenSSL 3.5.9"; haproxy -c -f cod 0; ssl-default-bind-curves X25519MLKEM768:X25519 si ssl-default-bind-options ssl-min-ver TLSv1.3 in global, http-response set-header Strict-Transport-Security "max-age=31536000" in frontend |
| hibrid singur / clasic singur / hibrid + clasic | reusit / reusit / reusit (TLSv1.3) | reusit / reusit / reusit (TLSv1.3) |
| client TLS 1.2 | refuzat ERR_SSL_TLSV1_ALERT_PROTOCOL_VERSION |
refuzat ERR_SSL_TLSV1_ALERT_PROTOCOL_VERSION |
| HSTS | Strict-Transport-Security: max-age=31536000 |
strict-transport-security: max-age=31536000 prin HAProxy, pe un raspuns venit de la un backend httpd FARA antet (control: curl direct pe backend, fara HSTS) |
Doua lucruri gasite pe drum, despre PROBA si despre RETETA, nu despre servere: (1) prima masurare HAProxy folosea http-request return si nu
vedea HSTS, fiindca regulile http-response nu se aplica unui raspuns generat intern de HAProxy (numai http-after-response); a doua
masurare trece raspunsul unui backend real prin frontend, si antetul apare; (2) comanda de preconditie a retetei haproxy -vv | grep -i "running on openssl" NU prinde nimic pe HAProxy 3.4: randul e "Running on SSL library version : OpenSSL 3.5.9"; reteta spune acum
grep -i "SSL library version". Ramane NEMASURAT: un Apache/HAProxy de productie cu configuratia lui intreaga, clienti reali (browsere).