问题描述
在使用 Chrome、Firefox 浏览器时,能够正常访问 HTTPS 站点。在使用 IE 浏览器时,无法正常访问并产生如下提示:
然后,我们按照提示修改 IE 浏览器的 TLS 设置:
然后便可正常访问 HTTPS 站点(默认只勾选TLS 1.0选项),至此原因已经清晰。
问题原因
该站点部署在Kusernetes Cluster中,使用NGINX Ingress Controller暴露,但是NGINX Ingress Controller默认只支持TLS 1.2版本。在IE 11中,默认只启用TLS 1.0版本。因此出现TLS握手失败的情况,导致站点无法访问。
查看服务器支持哪些 SSL 协议版本:
#!/bin/sh openssl s_client -connect foo.example.com:443 -tls1 # TLSv1 openssl s_client -connect foo.example.com:443 -tls1_1 # TLSv1.1 openssl s_client -connect foo.example.com:443 -tls1_2 # TLSv1.2 openssl s_client -connect foo.example.com:443 -tls1_3 # TLSv1.3 # 有时可以使用NMAP进行扫描,但是有时候会出现无结果(原因未知) nmap --script ssl-enum-ciphers -p 443 www.example.com
解决办法
调整 NGINX Ingress Controller 配置,修改名为nginx-configuration的ConfigMap资源,在data中应包含如下两行配置:
ssl-ciphers: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl-protocols: TLSv1 TLSv1.1 TLSv1.2
相关文章
「SSL」- 常见错误汇总
「TLS/SSL」- 握手过程简述
参考文献
NGINX Ingress Controller/ConfigMaps/ssl-protocols
How can I verify if TLS 1.2 is supported on a remote web server from the RHEL/CentOS shell?
How do I use “openssl s_client” to test for (absence of) SSLv3 support?
Nginx/Module ngx_http_ssl_module/ssl_protocols