「TLS」- 与 IE 有关的问题

  CREATED BY JENKINSBOT

问题描述

在使用 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-configurationConfigMap资源,在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

参考文献

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