关于tls版本
检测工具
可以通过tls-test进行检查,但是明显有缓存;也可以使用gf.dev,但是很慢;
通过openssl client进行检查
# 强烈推荐使用testssl,项目地址:https://github.com/drwetter/testssl.sh
# --ip one只检测第一个ip,否则如果cdn会挨个检测所有ip
# -p 只检测tls version(protocol)
./testssl.sh --quiet --fast --ip one -p www.facebook.com
# nmap,明确了暂时不支持tls1.3
nmap --script ssl-enum-ciphers -p 443 www.facebook.com
# openssl,感觉也是不支持tls1.3
#If you get the certificate chain and the handshake you know the system in question supports TLS 1.2. If you see don't see the certificate chain, and something similar to "handshake error" you know it does not support TLS 1.2. You can also test for TLS 1 or TLS 1.1 with -tls1 or tls1_1 respectively.
openssl s_client -connect www.google.com:443 -tls1
openssl s_client -connect www.google.com:443 -tls1_1
openssl s_client -connect www.google.com:443 -tls1_2
# 从结果看不出来如何判断
openssl s_client -connect www.google.com:443 -ssl3
sslscan www.facebook.com|grep "Accepted"
TLS1.3 vs TLS1.2对比
- 更快的访问速度;因为tls1.3只需要1rtt就可以建立建立连接,tls1.2需要2个rtt;
- 更强的安全性;删除了不安全的加密算法;
CDN对TLS1.3的支持情况(2020-0403)
cloudflare:支持tls1.3,在“ssl/tls” =〉“Edge Certificates”=〉Minimum TLS Version,default tls1.0
cloudfront:不支持tls1.3,default TLSv1.1_2016(TLSv1.1 TLSv1.2),TLSv1.2_2018(TLSv1.2),文档中推荐TLSv1.2_2018(TLSv1.2)
加速乐:不支持tls1.3,后台不支持停止tls1.0 tls1.1
阿里云:不支持tls1.3
浏览器支持
wikipedia,可以看到浏览器最新版本都已经支持了tls1.3
其他HTTPS相关
HTTP严格传输安全(英语:HTTP Strict Transport Security,缩写:HSTS),是一个机制,开启之后服务器端的response header会增加Strict-Transport-Security header,比如
Strict-Transport-Security: max-age=31536000; includeSubDomains
告诉浏览器一年内,该域名以及子域名,如果给服务器发送请求,不是https,则浏览器强制将其转化成https
SNI的TLS扩展通过发送虚拟域的名字做为TSL协商的一部分修正了这个问题,在Client Hello阶段,通过SNI扩展,将域名信息提前告诉服务器,服务器根据域名取得对应的证书返回给客户端已完成校验过程。
没有SNI之前,SSL握手阶段信息中是不包含server_name的,比较新的浏览器(2010+)都支持了SNI扩展,在SSL握手阶段的hello信息中会包含server_name。