Linux
測試 HTTPS 會忽略 DHE 加密
我正在設置 nginx(v1.16.1,OpenSSL 1.1.1)以使用 https。我使用letsencrypt證書-帶有RSA加密的SHA-256。我使用 TLSv1.2 測試 ssllabs 和天文台。規定的加密下一行
ssl_ciphers DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
我測試並發現僅檢測到 ECDHE。我嘗試了各種組合。
問題是我需要加密才能在 Win 7 和 Win 8.1 版本中正確使用 IE11,並且在測試時出現錯誤
“伺服器發送致命警報:handshake_failure”
如果在同一個 ssllabs 上我看到 IE11 Win7 支持的證書,則表明我嘗試使用的支持。
LS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
如果我指定了一堆額外支持的加密,那麼一切都會好起來的,但所有其他加密方法都是弱的。
OpenSSL 支持這種類型的密碼
$ openssl ciphers -v | grep DHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
配置:
server { listen 443 ssl http2; server_name test.ru; ssl_protocols TLSv1.2; ssl_certificate /etc/nginx/conf.d/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/conf.d/ssl/privkey.pem; ssl_ciphers DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; add_header Strict-Transport-Security "max-age=63072000" always; location / { proxy_pass http://192.168.1.2; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_ssl_server_name on; proxy_ssl_name test.ru; proxy_set_header Host $http_host; proxy_pass_header Set-Cookie; }
可能是什麼原因?
您需要設置
ssl_dhparam
(請參閱https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam)以使 DHE 密碼在 nginx 上工作。從文件中引用:
預設情況下未設置任何參數,因此不會使用 DHE 密碼。