Investigate TLSv1.3 with Conscrypt
- 主要言語
- Java
- スター
- 12.1k
- フォーク
- 4k
- 平均マージ
- 2日 17時間
- マージ済み PR(30日)
- 37
説明
For some reason Conscrypt is incompatible with TLSv1.3 in ways that I wouldn't expect. It is known incompatible with the default TrustManager on older JDKs because those don't support TLSv1.3. But I explicitly constructed a TrustManagerFactory with the Conscrypt provider and passed it to `sslContextBuilder.trustManager(TrustManagerFactory)` and it still failed (the stack trace makes it seem like it didn't use the TrustManager I provided):
JDK 8u232 (TlsTest)
```
java.security.cert.CertificateException: java.lang.IllegalArgumentException: TLSv1.3
at org.conscrypt.ConscryptEngine.verifyCertificateChain(ConscryptEngine.java:1654)
at org.conscrypt.NativeCrypto.ENGINE_SSL_read_direct(Native Method)
at org.conscrypt.NativeSsl.readDirectByteBuffer(NativeSsl.java:567)
at org.conscrypt.ConscryptEngine.readPlaintextDataDirect(ConscryptEngine.java:1097)
at org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1081)
... 26 more
Caused by:
java.lang.IllegalArgumentException: TLSv1.3
at sun.security.ssl.ProtocolVersion.valueOf(ProtocolVersion.java:187)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:266)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:144)
at org.conscrypt.Platform.checkServerTrusted(Platform.java:330)
at org.conscrypt.ConscryptEngine.verifyCertificateChain(ConscryptEngine.java:1646)
... 30 more
```
But there's incompatibilities with JDK 8u275, which supports TLSv1.3, which is super-unfortunate:
```
java.security.cert.CertificateException: Unknown authType: GENERIC
at sun.security.validator.EndEntityChecker.checkTLSServer(EndEntityChecker.java:289)
at sun.security.validator.EndEntityChecker.check(EndEntityChecker.java:144)
at sun.security.validator.Validator.validate(Validator.java:284)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:315)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:278)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
at org.conscrypt.Platform.checkServerTrusted(Platform.java:330)
at org.conscrypt.ConscryptEngine.verifyCertificateChain(ConscryptEngine.java:1646)
at org.conscrypt.NativeCrypto.ENGINE_SSL_read_direct(Native Method)
at org.conscrypt.NativeSsl.readDirectByteBuffer(NativeSsl.java:567)
at org.conscrypt.ConscryptEngine.readPlaintextDataDirect(ConscryptEngine.java:1097)
at org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1081)
```
コントリビューションガイド
調査の方向性
TlsTest と sslContextBuilder.trustManager(TrustManagerFactory) の呼び出しから始め、org.conscrypt.Platform.checkServerTrusted と ConscryptEngine.verifyCertificateChain を通るスタックフレームを追跡します。記載されている JDK 8u232 と JDK 8u275 の環境で失敗を再現します。TrustManager と TLSv1.3 の互換性の原因を特定するか、具体的な修正を文書化できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- networking, security
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100