2017-03-01 [TLS][Haskell]TLS 1.3 開発日記 その13 TLS 1.3を遮断する中継装置 経緯 Chrome は version 56 から TLS 1.3 ID 18 をサポート(0-RTT 以外)。 Chrome 56 の前にBlueCoatがある状態で Google サービスにアクセスしようとすると、アクセスできないことが判明。 ChromeはTLS.13をdisabledに戻した。 原因 TLS 1.3は、TLS 1.2と区別のつかないClient Helloを送る。拡張でバージョンが1.3だと教える。 TLSの実装は、知らない拡張は単に無視してエラーにしてはいけないという鉄則により、TLSのバージョンアップは順調にいくはずだと信じられていた。 BlueCoatは、サーバからのCertificateの中身を見て、中継するか否かを決めるらしい。 TLS 1.3を知らないBlueCoatには、Client HelloがTLS 1.2に見える。 しかし、サーバから戻って来たハンドシェイクは暗号化されているから中身が読めない。 「TLS 1.2じゃない」と言って、コネクションを遮断。 考察 世の中にはいろんな実装がある。はぁ。 Firefoxは、TLS 1.2にフォールバックするらしい。 ChromeでもTLS 1.2にフォールバックすれば一応問題解決。 しかし、TLS 1.2でも1.3でもうまくいくようにClient Helloは設計されているので、TLS 1.2にフォールバックするのは、なんだかなぁという感じ。 BlueCoatよ、早く直して。