最近公司開始在討論 TLS v1.3 的支援問題,在還沒決議前先來做一下功課
TLS v1.3 的詳細介紹在之前文章「OpenSSL 1.1.1 將支援 TLS 1.3 和 chacha20, poly1305, GCM cipher」有講過,也可以參考 RFC 8446。
各平台瀏覽器支援
- Chrome 尚未完全支援 TLSv1.3
- 曾經在 Chrome 70 開啟 TLSv1.3 支援,但因為交握仍有可能有問題,目前採用「當不符合 TLSv1.3 則降級到 TLSv1.2 版本」的相容性版本。
- Opera 同 Chrome (因為使用相同內核)
- Firefox 60.0 開始預設支援
- Safari for iOS 12/macOS 14.x:預設不支援 TLSv1.2,但可以透過設定
tcp_connect_enable_tls13
開啟 TLSv1.3 支援 - Safari for iOS 13/macOS 15.x:預設 ATS 仍是 TLSv1.2,但最大已支援 TLSv1.3。
- Microsoft 系列瀏覽器對 TLSv1.3 的支援
- Micsoroft Edge (Chromium) 第一版就支援
- Microsoft Edge (EdgeHTML) 必須在 Windows 10 (Server) v1903 版本後,並且從註冊表上設定「
Protocols\TLS 1.3\Client
」 - Internet Explorer?什麼古老的東西怎麼可能支援 TLSv1.3
各開發語言、套件支援
- 系統元件
- OpenSSL v1.1.1 之後版本
- NSS v3.39 之後版本
- Web Application
- Nginx 1.13 之後版本 (必須搭配 OpenSSL v1.1.1 以上)
- Apache 2.4.37 之後版本 (必須搭配 OpenSSL v1.1.1 以上)
- 程式語言
- PHP cURL 7.52 之後版本 (必須搭配 NSS v3.39 以上)
- Java SE 11 之後版本 (Azul 開源為 Java 8 支援的 TLSv1.3 版本)
- Node.js 12.x 預設啟用,10.x / 11.x 則可以透過
--tls-max-v1.3
啟動 - Python 3.7 之後版本 (必須搭配 OpenSSL v1.1.1 以上)
- Golang 1.12 之後版本
基本上以目前現況要完全支援 TLS v1.3 需要考量的東西還蠻多的,而且幾乎要非常新的版本才有支援,而且 TLSv1.3 更改了協定的交握方式,是不是有實作上的 Bug 需要常常更新也是要考量進去的。