之前在用 Nginx 安裝 chacha20 + Poly1305 的時候就抱怨過 openssl 竟然不支援 chacha20、poly1305,終於在最近 openssl 的一篇文章「Using TLS1.3 With OpenSSL」提到了
- TLS 1.2 和 TLS 1.3 的差異可以看 TLS 1.3 草案
由於 TLS 1.3 還在草案階段,所以 OpenSSL 1.1.1 版本會等到 TLS 1.3 更新後才釋出。
裡面提到了 openssl 1.1.1 的差異,雖然是 major 的更新,但是實際上有些重大的不同
舊的 cipher 被 TLS 1.3 棄用,而新的 cipher 舊的也不能用,所以可能無法真的無痛升級。
There are new ciphersuites that only work in TLSv1.3. The old ciphersuites cannot be used for TLSv1.3 connections.
加入 group 的概念,Client 的 Hello 會被多塞一個 key_share 用於 “group”
Clients provide a “key_share” in the ClientHello. This has consequences for “group” configuration.
在 TLS 1.2 的時候在建立 ssl handshake 的時候就會一並把 session 建立起來,但是在 TLS 1.3 handshake 和 session 建立是分開的,當 ssl handshake 建立後會將 ssl handshake information 發給 client 來建立 session,也就是說在某些狀況下會出現 SSL 建立,但是 session 沒有建立的狀況,但實際 application 層面的實作上是一樣的。
Sessions are not established until after the main handshake has been completed. There may be a gap between the end of the handshake and the establishment of a session (or, in theory, a session may not be established at all). This could have impacts on session resumption code.
被棄用的 DSA 憑證
DSA certificates are no longer allowed in TLSv1.3 connections
在 TLS 1.3 的連線中不接受重新連接,更安全
Renegotiation is not possible in a TLSv1.3 connection
被支援的 cipher
TLS13-AES-256-GCM-SHA384
TLS13-CHACHA20-POLY1305-SHA256
TLS13-AES-128-GCM-SHA256
TLS13-AES-128-CCM-8-SHA256
TLS13-AES-128-CCM-SHA256
結論:TLS 1.3 是嶄新的一大步,但是 openssl 的更新對於現有的 “設備” 將是一大考驗。