grpc / grpc/grpc-java

Investigate TLSv1.3 with Conscrypt

Ouverte
#7,765 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
Java
Étoiles
12.1k
Forks
4k
Merge moyen
2 j 17 h
PR mergées (30 j)
37

Description

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)
```

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par TlsTest et l’appel sslContextBuilder.trustManager(TrustManagerFactory), puis suivez les stack frames à travers org.conscrypt.Platform.checkServerTrusted et ConscryptEngine.verifyCertificateChain. Reproduisez les échecs dans les environnements JDK 8u232 et JDK 8u275 cités ; le travail est terminé lorsque la cause de compatibilité entre TrustManager et TLSv1.3 est identifiée ou qu’une correction concrète est documentée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
networking, security
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.