TLSv1.3 Support:主流 Web 客戶端和服務端對 TLSv1.3 的支持情況
請訪問原文鏈接:https://sysin.org/blog/tlsv1-3-support/,查看最新版,原創作品,轉載請保留出處,
作者:gc(at)sysin.org,主頁:www.sysin.org
2021 年 8 月發布的 Windows Server 2022 正式支持 QUIC 和 TLS 1.3 相關特性,至此,主流產品已經全部支持 TLSv1.3 協議,

TLS 1.3 由 IETF 于 2018 年 8 月正式發布,
1. 為什么要使用 TLSv1.3
SSL:Secure Sockets Layer 安全套接字層,
TLS:Transport Layer Security,傳輸層安全,
TLS 是 IETF 在 SSL3.0 基礎上設計的協議,實際上相當于 SSL 的后續版本,
TLS(Transport Layer Security)是一種加密協議,旨在通過 IP 網路提供安全通信,它是當今非常常見的協議,用于保護 Web 瀏覽器和 Web 服務器之間的 HTTP 通信,當使用 TLS 保護 HTTP 時,它通常被稱為 HTTPS(HTTP Secure),TLS/SSL 是安全傳輸層協議,是介于 TCP 和 HTTP 之間的一層安全協議,不影響原有的 TCP 協議和 HTTP 協議,
TLS 1.3 是時隔九年對 TLS 1.2 等之前版本的新升級,也是迄今為止改動最大的一次,針對目前已知的安全威脅,IETF(Internet Engineering Task Force,互聯網工程任務組)制定 TLS 1.3 的新標準,使其有望成為有史以來最安全,但也最復雜的 TLS 協議,
TLS 1.3 與之前的協議有較大差異,主要在于:
- 相比過去的的版本,引入了新的密鑰協商機制 — PSK
- 支持 0-RTT 資料傳輸,在建立連接時節省了往返時間
- 廢棄了 3DES、RC4、AES-CBC 等加密組件,廢棄了 SHA1、MD5 等哈希演算法
- ServerHello 之后的所有握手訊息采取了加密操作,可見明文大大減少
- 不再允許對加密報文進行壓縮、不再允許雙方發起重協商
- DSA 證書不再允許在 TLS 1.3 中使用
對比舊協議中的不足,TLS 1.3 確實可以稱得上是向前邁了一大步,既避免之前版本出現的缺陷,也減少了 TLS 握手的時間,
總結一下,TLS 1.3 與以前的版本相比具有如下兩個大的優勢:更快的訪問速度和更強的安全性!
TLS 1.0 和 TLS 1.1 是分別于 1996 年和 2006 年發布的老版協議,使用的是弱加密演算法和系統,比如 SHA-1 和 MD5,這些演算法和系統十分脆弱,存在重大安全漏洞,容易受到降級攻擊的嚴重影響,而在 2008 年和 2017 年分別發布了協議的新版本,即 TLS 1.2 和 TLS 1.3,無疑更優于舊版本,使用起來也更安全,
2018 年,在春季 TLS 1.3 版本發布之后,蘋果、谷歌、Mozilla 和微軟四大瀏覽器制造商于 2018 年 10 月聯合宣布計劃在 2020 年初取消對 TLS 1.0 和 TLS 1.1 的支持,
主流瀏覽器客戶端都提供了禁用 TLS 1.0 和 TLS 1.1 協議的大致期限:
| Browser Name | Date |
|---|---|
| Microsoft IE and Edge | First half of 2020 |
| Mozilla Firefox | March 2020 |
| Safari/Webkit | March 2020 |
| Google Chrome | January 2020 |
備注:由于受 COVID-19 影響,瀏覽器廠商推遲了 TLS 1.0 和 1.1 版本協議的淘汰時間,
參考:
- Modernizing TLS connections in Microsoft Edge and Internet Explorer 11 : https://blogs.windows.com/msedgedev/2018/10/15/modernizing-tls-edge-ie11/
- Removing Old Versions of TLS : https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of-tls/
- Deprecation of Legacy TLS 1.0 and 1.1 Versions: https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/
- Modernizing Transport Security: https://security.googleblog.com/2018/10/modernizing-transport-security.html
- Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS): https://tools.ietf.org/html/rfc7525
2. 客戶端支持
2.1 瀏覽器(Chrome、Firefox、Safari)
現代主流作業系統(Unix、Linux、Windows,包括移動作業系統 Andriod 和 iOS)中的瀏覽器及相關組件都可以支持 TLS 1.3,
最低版本要求如下:
Modern: Modern clients that support TLS 1.3, with no need for backwards compatibility
| Configuration | Firefox | Android | Chrome | Edge | Internet Explorer | Java | OpenSSL | Opera | Safari |
|---|---|---|---|---|---|---|---|---|---|
| Modern | 63 | 10.0 | 70 | 75 | -- | 11 | 1.1.1 | 57 | 12.1 |
參看:https://wiki.mozilla.org/Security/Server_Side_TLS
Microsoft Internet Explorer 不支持 TLS 1.3,其替代產品 Microsoft Edge 沿襲 Google Chrome 相關特性,
2.2 curl
curl 是請求訪問 Web 服務器的命令列工具,7.52.0 & + 版本支持 TLSv1.3,
7.52.0 - December 21 2016,curl: introduce the --tlsv1.3 option to force TLS 1.3
使用引數 --tlsv1.3,可以通過 curl --help 查看是否支持該引數
3. 服務端支持
3.1 F5 BIG-IP
BIG-IP? 系統是一組應用交付產品,它們協同作業以確保高可用性、改進的性能、應用安全和訪問控制,BIG-IP 系統的主要功能之一是將不同型別的協議和應用程式流量定向到適當的目標服務器,系統通過其 Local Traffic Manager? 模塊實作這一點,該模塊可以將流量直接轉發到負載平衡服務器池,或將流量發送到下一跳路由器、路由器池或直接發送到網路上的選定節點,BIG-IP 系統上可用的其他模塊提供關鍵功能,例如將安全策略應用于網路流量、加速 HTTP 連接以及優化廣域網中的連接,
F5 BIG-IP 當前 LTS 版本 14.1.0、15.1.0、16.1.0 及以上版本都可以完整支持 TLSv1_3,
BIG-IP v14 開始支持 TLSv1_3(In BIG-IP 14.0.0, the BIG-IP system adds limited support for Transport Layer Security (TLS) 1.3. Starting in BIG-IP 14.1.0.1 and later, this support was updated to provide production level support for TLS 1.3.)
By default, TLS 1.3 is disabled. To enable TLS 1.3, you must remove the No TLSv1.3 option from the Enabled Options list in the Configuration utility for the Client SSL and Server SSL profiles
You can view a list of TLS 1.3 supported ciphers and groups using the following TMOS Shell (tmsh) commands:
-
To view the supported client-side ciphers, use the following command:
tmsh run util clientssl-ciphers TLSv1_3
-
To view the supported server-side ciphers, use the following command:
tmsh run util serverssl-ciphers TLSv1_3
配置啟用 TLSv1_3 的步驟如下:
編輯 ClientSSL Profle:
Ciphers:選擇 Cipher Group,下拉選擇 f5-secure
Options:Options List...
Enabled Options,
Disable No TLSv1.3
添加,No TLSv1 和 TLSv1.1,保留默認的 “Don't insert empty fragments”
注意:TLSv1_3 是 F5 產品中的寫法,與其他開源產品中的 TLSv1.3 不同,
3.2 Windows & IIS
Windows? Server 的 Internet 資訊服務 (IIS) 是一種靈活、安全且可管理的 Web 服務器,用于托管 Web 上的任何內容,從媒體流到 Web 應用程式,IIS 的可擴展和開放架構已準備好處理最苛刻的任務,
2021 年 8 月發布的 Windows Server 2022 正式支持 HTTP/3、QUIC 和 TLS 1.3 相關特性,
在 Windows Server 2022 中的 IIS 新建一個站點將默認啟用 TLS 1.3 以及 QUIC,除非手動勾選禁用,

備注:IIS 10 & Windows Server 2019 以及之前版本無法支持,參看,
3.3 Nginx
nginx [engine x] 是一個 HTTP 和反向代理服務器,郵件代理服務器,和一個通用的 TCP/UDP 代理服務器,最初由 Igor Sysoev 撰寫,在許多負載很重的俄羅斯網站上運行了很久,包括 Yandex、Mail.Ru、VK 和 Rambler,根據 Netcraft 的說法,nginx 服務或代理 22.36% 最繁忙的網站 (2021 年 11 月),
以下是一些成功案例:Dropbox、Netflix、Wordpress.com、FastMail.FM,
Nginx 1.13.0 開始支持 TLSv1.3(2017-04-25 nginx-1.13.0 mainline version has been released. ),
- The
TLSv1.1andTLSv1.2parameters (1.1.13, 1.0.12) work only when OpenSSL 1.0.1 or higher is used. - The
TLSv1.3parameter (1.13.0) works only when OpenSSL 1.1.1 built with TLSv1.3 support is used.
More info on the NGINX documentation
參考配置:啟用 HTTP/2、TLSv1.3、推薦的 Ciphers、HSTS
server {
listen 443 ssl http2; # HTTP/2 Enable
server_name www.sysin.org;
ssl_certificate www.sysin.org.crt;
ssl_certificate_key www.sysin.org.key;
ssl_protocols TLSv1.2 TLSv1.3; # Requires nginx >= 1.13.0 else use TLSv1.2
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
...
}
NGINX 1.21.4 引入了 Kernel TLS 特性 (introduces support for kTLS )大幅提高了 TLS 傳輸性能,要求 OpenSSL 3.0 + FreeBSD 13/Linux Kernel 4.17+,詳見:Improving NGINX Performance with Kernel TLS and SSL_sendfile( ),
3.4 Apache httpd
Apache HTTP Server 專案致力于開發和維護一個用于現代作業系統的開源 HTTP 服務器,包括 UNIX 和 Windows,該專案的目標是提供一個安全、高效和提供與當前 HTTP 同步的 HTTP 服務的可擴展服務器標準,
Apache HTTP 服務器(“httpd”)于 1995 年推出,自 1995 年以來一直是 Internet 上最受歡迎的 Web 服務器,1996 年 4 月,它在 2020 年 2 月慶祝了它作為一個專案的 25 歲生日,
版本要求:
- Apache version
2.4.36or greater. (搜索網上文章傳言 2.4.38 有誤!) - OpenSSL version
1.1.1or greater.
CentOS 8 和 Ubuntu 20.04 自帶軟體包滿足要求,低版本需要編譯安裝,
[root@c8 ~]# openssl version
OpenSSL 1.1.1c FIPS 28 May 2019
[root@c8 ~]# dnf list httpd
Installed Packages
httpd.x86_64 2.4.37-21.module_el8.2.0+382+15b0afa8 @AppStream
root@u20:~# openssl version
OpenSSL 1.1.1f 31 Mar 2020
root@u20:~# apt list apache2
Listing... Done
apache2/focal 2.4.41-4ubuntu3 amd64
啟用 TLS 1.3 和 1.2:
The Apache version 2.4.36 or higher versions support TLS v1.3. You must upgrade Apache packages before enabled TLS 1.3 in SSL settings.
SSLProtocol -all +TLSv1.2 +TLSv1.3
配置項如下所示:
<VirtualHost *:443>
ServerName www.sysin.org
DocumentRoot /var/www/html
SSLEngine on
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCertificateFile "/path/to/www.sysin.org.cert"
SSLCertificateKeyFile "/path/to/www.sysin.org.key"
</VirtualHost>
記得重啟 Apache 服務才能生效,
3.5 Apache Tomcat
Apache Tomcat? 軟體是 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 規范的開源實作,這些規范是 Jakarta EE 平臺的一部分,Jakarta EE 平臺是 Java EE 平臺的演變,Tomcat 10 及更高版本實作了作為 Jakarta EE 一部分開發的規范,Tomcat 9 及更早版本實作了作為 Java EE 一部分開發的規范,
當前最新的 Tomcat 7.0+ Release 都可以支持 TLSv1.3,具體版本如下:
2018-11-15 Tomcat 7.0.92 Released
- Support for TLSv1.3 when used with a JRE or OpenSSL version that supports it
2018-11-07 Tomcat 8.5.35 Released
- support for TLSv1.3 when used with a JRE or OpenSSl version that supports it
2018-11-07 Tomcat 9.0.13 Released
- support for TLSv1.3 when used with a JRE or OpenSSL version that supports it
Tomcat 10.0 當然支持(最早發布的版本:2020-02-20 Tomcat 10.0.0-M1 (markt)),
請注意,只有在使用實作 TLSv1.3 的 JVM 時,JSSE 才支持 TLSv1.3,
配置示例:
編輯 server.xml 組態檔,SSLHostConfig protocols= 欄位如下:
<!-- Define an SSL/TLS HTTP/1.1 Connector on port 443 with HTTP/2
-->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig protocols="TLSv1.2+TLSv1.3"
ciphers="HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" >
<Certificate certificateKeystoreFile="conf/k8s.sysin.cn.pfx"
certificateKeystoreType="PKCS12"
certificateKeystorePassword="your-pfx-password" />
</SSLHostConfig>
</Connector>
<!-- 默認引數如下:
hostName= default:`_default_`
ciphers= default:`HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA`
protocols= default:`all`
-->
重啟 Tomcat 生效,
protocols 寫法:
The names of the protocols to support when communicating with clients. This should be a list of any combination of the following:
SSLv2Hello
SSLv3
TLSv1
TLSv1.1
TLSv1.2
TLSv1.3
all
串列中的每個標記都可以以加號(“+”)或減號(“-”)為前綴,加號添加協議,減號將其從當前串列中洗掉,該串列是從一個空串列開始構建的,
字符 all 是 SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 的別名,
請注意,只有在使用實作 TLSv1.3 的 JVM 時,JSSE 才支持 TLSv1.3,
請注意,對于基于 OpenSSL 的安全連接器,將忽略 SSLv2Hello,如果為基于 OpenSSL 的安全連接器指定了多個協議,它將始終支持 SSLv2Hello,如果指定了單個協議,它將不支持 SSLv2Hello,
請注意,SSLv2 和 SSLv3 本質上是不安全的,
如果未指定,則將使用 all 的默認值,
3.6 HAProxy
HAProxy 是一種免費、快速且可靠的反向代理,可為基于 TCP 和 HTTP 的應用程式提供高可用性、負載平衡和代理,它特別適用于流量非常高的網站,并為世界上大部分訪問量最大的網站提供支持,多年來,它已成為事實上的標準開源負載均衡器,現在隨大多數主流 Linux 發行版一起提供,并且通常默認部署在云平臺中,由于它不做廣告,我們只知道它在管理員報告時被使用:-)
要求:HAProxy 1.8.1 及以上,OpenSSL 1.1.1 及以上,
引數:ssl-default-bind-ciphersuites,參看 https://sysin.org/blog/get-a-plus-rating-on-ssl-test/ SSL cipher 部分的描述,
3.7 Varnish with Hitch
Varnish Cache 是一種 web 應用程式加速器,同時以被用于快取的 HTTP 反向代理而聞名,Varnish HTTP/2 前端通過 Hitch 代理實作,Hitch 是 Varnish Software 開發的基于 libev 的高性能 SSL/TLS 開源代理軟體,
筆者寫了一篇文章描述了整個配置程序,訪問這里查看:Varnish with Hitch HTTP/2 implement on CentOS 8.0
hitch 參考配置:Ciphers,HTTP/2 和 TLSv1.3
版本要求:
- Cache 5.0 開始實驗性的支持 HTTP/2
- Varnish 6.0 完整支持 HTTP/2
- hitch 1.5 版本開始支持 TLS 1.3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/378155.html
標籤:其他
