Crypto-View

netty/netty

Cryptographic posture

812 cryptographic locations: 85 already broken, 496 quantum-vulnerable, 16 reduced-margin, 195 undetermined, 20 quantum-safe

322 establish keys, so traffic protected by them and recorded today becomes readable once the algorithm falls. 12 imported cryptographic libraries are listed separately. 3921 files analysed.

Quantum-vulnerable 496 Already broken 85 Reduced margin 16 Could not be determined 195 Quantum-safe 20
To address455
Key establishment322
Inventory only12
Total findings824
What was analysed
Branch 4.2
Commit 8488ebd5afc636ebf6905721b38de752e8daebce Http2: Reserve promised stream before running the request verifier (#17495)
Committed 2026-09-21 07:26 UTC
Scanned 2026-09-21 10:56 UTC 9 hours ago
Coverage 3921 files, 3594 java, 1 javascript

List of cryptographic assets

RSAES-PKCS1v15 Already broken Recorded traffic 40 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:103 public static final String TLS_RSA_WITH_ECDHE_ARIA256_GCM_SHA384 = "TLS_RSA_WITH_ECDHE_ARIA256_GCM_SHA384";
  2. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:168 public static final String TLS_RSA_WITH_ECDHE_ARIA128_GCM_SHA256 = "TLS_RSA_WITH_ECDHE_ARIA128_GCM_SHA256";
  3. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:393 public static final String TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
  4. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:403 public static final String TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 = "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256";
  5. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:429 public static final String TLS_RSA_PSK_WITH_ARIA256_GCM_SHA384 = "TLS_RSA_PSK_WITH_ARIA256_GCM_SHA384";
  6. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:439 public static final String TLS_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384";
  7. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:444 public static final String TLS_RSA_WITH_AES_256_CBC_CCM8 = "TLS_RSA_WITH_AES_256_CBC_CCM8";
  8. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:449 public static final String TLS_RSA_WITH_AES_256_CBC_CCM = "TLS_RSA_WITH_AES_256_CBC_CCM";
  9. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:454 public static final String TLS_RSA_WITH_ARIA256_GCM_SHA384 = "TLS_RSA_WITH_ARIA256_GCM_SHA384";
  10. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:484 public static final String TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
  11. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:504 public static final String TLS_RSA_PSK_WITH_ARIA128_GCM_SHA256 = "TLS_RSA_PSK_WITH_ARIA128_GCM_SHA256";
  12. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:514 public static final String TLS_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256";
  13. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:519 public static final String TLS_RSA_WITH_AES_128_CBC_CCM8 = "TLS_RSA_WITH_AES_128_CBC_CCM8";
  14. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:524 public static final String TLS_RSA_WITH_AES_128_CBC_CCM = "TLS_RSA_WITH_AES_128_CBC_CCM";
  15. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:529 public static final String TLS_RSA_WITH_ARIA128_GCM_SHA256 = "TLS_RSA_WITH_ARIA128_GCM_SHA256";
  16. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:554 public static final String TLS_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256";
  17. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:559 public static final String TLS_RSA_WITH_CAMELLIA256_SHA256 = "TLS_RSA_WITH_CAMELLIA256_SHA256";
  18. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:564 public static final String TLS_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256";
  19. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:569 public static final String TLS_RSA_WITH_CAMELLIA128_SHA256 = "TLS_RSA_WITH_CAMELLIA128_SHA256";
  20. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:599 public static final String TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
  21. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:609 public static final String TLS_RSA_PSK_WITH_AES_256_CBC_SHA = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
  22. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:624 public static final String TLS_RSA_PSK_WITH_CAMELLIA256_SHA384 = "TLS_RSA_PSK_WITH_CAMELLIA256_SHA384";
  23. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:634 public static final String TLS_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA";
  24. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:639 public static final String TLS_RSA_WITH_CAMELLIA256_SHA = "TLS_RSA_WITH_CAMELLIA256_SHA";
  25. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:684 public static final String TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
  26. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:694 public static final String TLS_RSA_PSK_WITH_AES_128_CBC_SHA = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
  27. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:709 public static final String TLS_RSA_PSK_WITH_CAMELLIA128_SHA256 = "TLS_RSA_PSK_WITH_CAMELLIA128_SHA256";
  28. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:719 public static final String TLS_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA";
  29. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:724 public static final String TLS_RSA_WITH_SEED_SHA = "TLS_RSA_WITH_SEED_SHA";
  30. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:729 public static final String TLS_RSA_WITH_CAMELLIA128_SHA = "TLS_RSA_WITH_CAMELLIA128_SHA";
  31. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:734 public static final String TLS_RSA_WITH_IDEA_CBC_SHA = "TLS_RSA_WITH_IDEA_CBC_SHA";
  32. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:180 defaultCiphers.add("TLS_RSA_WITH_AES_128_GCM_SHA256");
  33. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:181 defaultCiphers.add("TLS_RSA_WITH_AES_128_CBC_SHA");
  34. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:183 defaultCiphers.add("TLS_RSA_WITH_AES_256_CBC_SHA");
  35. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:38 test path testJ2OMapping("TLS_RSA_WITH_AES_128_CBC_SHA256", "AES128-SHA256");
  36. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:45 test path testJ2OMapping("TLS_RSA_WITH_AES_128_CBC_SHA", "AES128-SHA");
  37. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:52 test path testJ2OMapping("TLS_RSA_WITH_AES_128_GCM_SHA256", "AES128-GCM-SHA256");
  38. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:88 test path testJ2OMapping("TLS_RSA_WITH_NULL_SHA256", "NULL-SHA256");
  39. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:117 test path testJ2OMapping("TLS_RSA_WITH_AES_256_CBC_SHA", "AES256-SHA");
  40. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:127 test path testJ2OMapping("TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", "RSA-PSK-CHACHA20-POLY1305");
config.cipher-suite · CWE-757
3DES Already broken 22 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:57 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-DES-CBC3-SHA");
  2. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:58 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-DES-CBC3-SHA");
  3. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:60 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-DES-CBC3-SHA");
  4. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:61 test path testJ2OMapping("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-DES-CBC3-SHA");
  5. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:62 test path testJ2OMapping("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "DHE-RSA-DES-CBC3-SHA");
  6. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:63 test path testJ2OMapping("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "DHE-DSS-DES-CBC3-SHA");
  7. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:163 test path testO2JMapping("ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-DES-CBC3-SHA");
  8. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:164 test path testO2JMapping("ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-DES-CBC3-SHA");
  9. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:166 test path testO2JMapping("ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-DES-CBC3-SHA");
  10. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:167 test path testO2JMapping("ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-DES-CBC3-SHA");
  11. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:168 test path testO2JMapping("DHE_RSA_WITH_3DES_EDE_CBC_SHA", "DHE-RSA-DES-CBC3-SHA");
  12. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:169 test path testO2JMapping("DHE_DSS_WITH_3DES_EDE_CBC_SHA", "DHE-DSS-DES-CBC3-SHA");
  13. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:226 test path testO2JMapping("EDH_DSS_WITH_3DES_EDE_CBC_SHA", "EDH-DSS-DES-CBC3-SHA");
  14. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:257 test path testO2JMapping("EDH_RSA_WITH_3DES_EDE_CBC_SHA", "EDH-RSA-DES-CBC3-SHA");
  15. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:599 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "EDH-RSA-DES-CBC3-SHA");
  16. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:605 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-DES-CBC3-SHA");
  17. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:633 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "ECDHE-RSA-DES-CBC3-SHA");
  18. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:634 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "EDH-RSA-DES-CBC3-SHA");
  19. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:668 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "EDH-RSA-DES-CBC3-SHA");
  20. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:674 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-DES-CBC3-SHA");
  21. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:704 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "EDH-RSA-DES-CBC3-SHA");
  22. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:713 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "ECDHE-RSA-DES-CBC3-SHA");
config.cipher-suite · CWE-757
RC4 Already broken 11 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:64 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4-SHA");
  2. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:65 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4-SHA");
  3. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:67 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4-SHA");
  4. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:68 test path testJ2OMapping("TLS_ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4-SHA");
  5. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:170 test path testO2JMapping("ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4-SHA");
  6. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:171 test path testO2JMapping("ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4-SHA");
  7. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:173 test path testO2JMapping("ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4-SHA");
  8. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:174 test path testO2JMapping("ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4-SHA");
  9. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:607 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-RC4-SHA");
  10. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:677 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-RC4-SHA");
  11. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:717 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "ECDHE-RSA-RC4-SHA");
config.cipher-suite · CWE-757
NULL Already broken 9 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:88 test path testJ2OMapping("TLS_RSA_WITH_NULL_SHA256", "NULL-SHA256");
  2. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:89 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_NULL_SHA", "ECDHE-ECDSA-NULL-SHA");
  3. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:90 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_NULL_SHA", "ECDHE-RSA-NULL-SHA");
  4. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:92 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_NULL_SHA", "ECDH-ECDSA-NULL-SHA");
  5. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:93 test path testJ2OMapping("TLS_ECDH_RSA_WITH_NULL_SHA", "ECDH-RSA-NULL-SHA");
  6. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:195 test path testO2JMapping("ECDHE_ECDSA_WITH_NULL_SHA", "ECDHE-ECDSA-NULL-SHA");
  7. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:196 test path testO2JMapping("ECDHE_RSA_WITH_NULL_SHA", "ECDHE-RSA-NULL-SHA");
  8. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:198 test path testO2JMapping("ECDH_ECDSA_WITH_NULL_SHA", "ECDH-ECDSA-NULL-SHA");
  9. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:199 test path testO2JMapping("ECDH_RSA_WITH_NULL_SHA", "ECDH-RSA-NULL-SHA");
config.cipher-suite · CWE-757
MD5 Already broken 1 place See details

Hash algorithm through the JCA

`MessageDigest.getInstance()`. MD5 and SHA-1 are reported as already broken; SHA-256 is reported as a reduced margin rather than a defect.

This is already unsafe today, with no quantum computer involved. Practical chosen-prefix collisions exist; MD5 has no remaining security as a digest.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something that must remain verifiable for decades.

java.messagedigest · CWE-328
SHA-1 Already broken 1 place See details

Hash algorithm through the JCA

`MessageDigest.getInstance()`. MD5 and SHA-1 are reported as already broken; SHA-256 is reported as a reduced margin rather than a defect.

This is already unsafe today, with no quantum computer involved. SHAttered and subsequent work produced practical collisions; NIST withdrew SHA-1 in 2030 guidance and it is already unacceptable for signatures.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something that must remain verifiable for decades.

java.messagedigest · CWE-328
SHA-1 Already broken 1 place See details

Digest through BouncyCastle

A BouncyCastle digest class. The digest name is read from the class, so `MD5Digest` and `SHA512Digest` are the same rule with opposite conclusions.

This is already unsafe today, with no quantum computer involved. SHAttered and subsequent work produced practical collisions; NIST withdrew SHA-1 in 2030 guidance and it is already unacceptable for signatures.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something long-lived. MD5 and SHA-1 need replacing now.

  1. example/src/main/java/io/netty/example/ocsp/Digester.java:40 test path Digest digest = new SHA1Digest();
java.bouncycastle.digest · CWE-328
ECDH Quantum-vulnerable Recorded traffic 158 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:50 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
  2. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:54 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
  3. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:58 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
  4. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:60 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
  5. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:62 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
  6. codec-http2/src/main/java/io/netty/handler/codec/http2/Http2SecurityUtil.java:64 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
  7. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:41 public static final String TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
  8. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:46 public static final String TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
  9. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:61 public static final String TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 =
  10. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:62 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256";
  11. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:67 public static final String TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 =
  12. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:68 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
  13. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:78 public static final String TLS_ECDHE_ECDSA_WITH_AES_256_CBC_CCM8 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_CCM8";
  14. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:83 public static final String TLS_ECDHE_ECDSA_WITH_AES_256_CBC_CCM = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_CCM";
  15. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:98 public static final String TLS_ECDHE_ECDSA_WITH_ARIA256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_ARIA256_GCM_SHA384";
  16. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:123 public static final String TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
  17. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:128 public static final String TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
  18. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:143 public static final String TLS_ECDHE_ECDSA_WITH_AES_128_CBC_CCM8 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_CCM8";
  19. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:148 public static final String TLS_ECDHE_ECDSA_WITH_AES_128_CBC_CCM = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_CCM";
  20. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:163 public static final String TLS_ECDHE_ECDSA_WITH_ARIA128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_ARIA128_GCM_SHA256";
  21. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:188 public static final String TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
  22. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:193 public static final String TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
  23. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:208 public static final String TLS_ECDHE_ECDSA_WITH_CAMELLIA256_SHA384 = "TLS_ECDHE_ECDSA_WITH_CAMELLIA256_SHA384";
  24. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:213 public static final String TLS_ECDHE_RSA_WITH_CAMELLIA256_SHA384 = "TLS_ECDHE_RSA_WITH_CAMELLIA256_SHA384";
  25. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:238 public static final String TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
  26. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:243 public static final String TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
  27. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:258 public static final String TLS_ECDHE_ECDSA_WITH_CAMELLIA128_SHA256 = "TLS_ECDHE_ECDSA_WITH_CAMELLIA128_SHA256";
  28. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:263 public static final String TLS_ECDHE_RSA_WITH_CAMELLIA128_SHA256 = "TLS_ECDHE_RSA_WITH_CAMELLIA128_SHA256";
  29. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:288 public static final String TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
  30. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:293 public static final String TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
  31. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:333 public static final String TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
  32. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:338 public static final String TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
  33. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:413 public static final String TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 =
  34. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:414 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256";
  35. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:574 public static final String TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384";
  36. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:579 public static final String TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA = "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA";
  37. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:619 public static final String TLS_ECDHE_PSK_WITH_CAMELLIA256_SHA384 = "TLS_ECDHE_PSK_WITH_CAMELLIA256_SHA384";
  38. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:659 public static final String TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256";
  39. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:664 public static final String TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA = "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA";
  40. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:704 public static final String TLS_ECDHE_PSK_WITH_CAMELLIA128_SHA256 = "TLS_ECDHE_PSK_WITH_CAMELLIA128_SHA256";
  41. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:172 defaultCiphers.add("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384");
  42. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:173 defaultCiphers.add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256");
  43. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:174 defaultCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
  44. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:175 defaultCiphers.add("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384");
  45. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:176 defaultCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA");
  46. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:178 defaultCiphers.add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA");
  47. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:36 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256");
  48. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:37 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "ECDHE-RSA-AES128-SHA256");
  49. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:39 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", "ECDH-ECDSA-AES128-SHA256");
  50. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:40 test path testJ2OMapping("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", "ECDH-RSA-AES128-SHA256");
  51. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:43 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "ECDHE-ECDSA-AES128-SHA");
  52. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:44 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "ECDHE-RSA-AES128-SHA");
  53. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:46 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", "ECDH-ECDSA-AES128-SHA");
  54. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:47 test path testJ2OMapping("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "ECDH-RSA-AES128-SHA");
  55. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:50 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "ECDHE-ECDSA-AES128-GCM-SHA256");
  56. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:51 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ECDHE-RSA-AES128-GCM-SHA256");
  57. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:53 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", "ECDH-ECDSA-AES128-GCM-SHA256");
  58. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:54 test path testJ2OMapping("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", "ECDH-RSA-AES128-GCM-SHA256");
  59. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:57 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-DES-CBC3-SHA");
  60. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:58 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-DES-CBC3-SHA");
  61. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:60 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-DES-CBC3-SHA");
  62. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:61 test path testJ2OMapping("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-DES-CBC3-SHA");
  63. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:64 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4-SHA");
  64. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:65 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4-SHA");
  65. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:67 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4-SHA");
  66. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:68 test path testJ2OMapping("TLS_ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4-SHA");
  67. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:89 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_NULL_SHA", "ECDHE-ECDSA-NULL-SHA");
  68. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:90 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_NULL_SHA", "ECDHE-RSA-NULL-SHA");
  69. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:92 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_NULL_SHA", "ECDH-ECDSA-NULL-SHA");
  70. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:93 test path testJ2OMapping("TLS_ECDH_RSA_WITH_NULL_SHA", "ECDH-RSA-NULL-SHA");
  71. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:110 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "ECDHE-ECDSA-AES256-SHA");
  72. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:111 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", "ECDHE-RSA-AES256-SHA");
  73. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:112 test path testJ2OMapping("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", "ECDH-ECDSA-AES256-SHA");
  74. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:113 test path testJ2OMapping("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", "ECDH-RSA-AES256-SHA");
  75. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:121 test path testJ2OMapping("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-RSA-CHACHA20-POLY1305");
  76. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:122 test path testJ2OMapping("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-ECDSA-CHACHA20-POLY1305");
  77. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:125 test path testJ2OMapping("TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-PSK-CHACHA20-POLY1305");
  78. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:142 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256");
  79. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:143 test path testO2JMapping("ECDHE_RSA_WITH_AES_128_CBC_SHA256", "ECDHE-RSA-AES128-SHA256");
  80. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:145 test path testO2JMapping("ECDH_ECDSA_WITH_AES_128_CBC_SHA256", "ECDH-ECDSA-AES128-SHA256");
  81. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:146 test path testO2JMapping("ECDH_RSA_WITH_AES_128_CBC_SHA256", "ECDH-RSA-AES128-SHA256");
  82. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:149 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "ECDHE-ECDSA-AES128-SHA");
  83. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:150 test path testO2JMapping("ECDHE_RSA_WITH_AES_128_CBC_SHA", "ECDHE-RSA-AES128-SHA");
  84. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:152 test path testO2JMapping("ECDH_ECDSA_WITH_AES_128_CBC_SHA", "ECDH-ECDSA-AES128-SHA");
  85. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:153 test path testO2JMapping("ECDH_RSA_WITH_AES_128_CBC_SHA", "ECDH-RSA-AES128-SHA");
  86. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:156 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "ECDHE-ECDSA-AES128-GCM-SHA256");
  87. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:157 test path testO2JMapping("ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ECDHE-RSA-AES128-GCM-SHA256");
  88. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:159 test path testO2JMapping("ECDH_ECDSA_WITH_AES_128_GCM_SHA256", "ECDH-ECDSA-AES128-GCM-SHA256");
  89. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:160 test path testO2JMapping("ECDH_RSA_WITH_AES_128_GCM_SHA256", "ECDH-RSA-AES128-GCM-SHA256");
  90. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:163 test path testO2JMapping("ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-DES-CBC3-SHA");
  91. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:164 test path testO2JMapping("ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-DES-CBC3-SHA");
  92. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:166 test path testO2JMapping("ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-DES-CBC3-SHA");
  93. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:167 test path testO2JMapping("ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-DES-CBC3-SHA");
  94. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:170 test path testO2JMapping("ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4-SHA");
  95. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:171 test path testO2JMapping("ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4-SHA");
  96. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:173 test path testO2JMapping("ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4-SHA");
  97. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:174 test path testO2JMapping("ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4-SHA");
  98. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:195 test path testO2JMapping("ECDHE_ECDSA_WITH_NULL_SHA", "ECDHE-ECDSA-NULL-SHA");
  99. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:196 test path testO2JMapping("ECDHE_RSA_WITH_NULL_SHA", "ECDHE-RSA-NULL-SHA");
  100. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:198 test path testO2JMapping("ECDH_ECDSA_WITH_NULL_SHA", "ECDH-ECDSA-NULL-SHA");
  101. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:199 test path testO2JMapping("ECDH_RSA_WITH_NULL_SHA", "ECDH-RSA-NULL-SHA");
  102. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:216 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "ECDHE-ECDSA-AES256-SHA");
  103. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:217 test path testO2JMapping("ECDHE_RSA_WITH_AES_256_CBC_SHA", "ECDHE-RSA-AES256-SHA");
  104. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:218 test path testO2JMapping("ECDH_ECDSA_WITH_AES_256_CBC_SHA", "ECDH-ECDSA-AES256-SHA");
  105. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:219 test path testO2JMapping("ECDH_RSA_WITH_AES_256_CBC_SHA", "ECDH-RSA-AES256-SHA");
  106. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:235 test path testO2JMapping("ECDHE_RSA_WITH_AES_256_GCM_SHA384", "ECDHE-RSA-AES256-GCM-SHA384");
  107. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:236 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "ECDHE-ECDSA-AES256-GCM-SHA384");
  108. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:237 test path testO2JMapping("ECDHE_RSA_WITH_AES_256_CBC_SHA384", "ECDHE-RSA-AES256-SHA384");
  109. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:238 test path testO2JMapping("ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", "ECDHE-ECDSA-AES256-SHA384");
  110. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:245 test path testO2JMapping("ECDH_RSA_WITH_AES_256_GCM_SHA384", "ECDH-RSA-AES256-GCM-SHA384");
  111. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:246 test path testO2JMapping("ECDH_ECDSA_WITH_AES_256_GCM_SHA384", "ECDH-ECDSA-AES256-GCM-SHA384");
  112. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:247 test path testO2JMapping("ECDH_RSA_WITH_AES_256_CBC_SHA384", "ECDH-RSA-AES256-SHA384");
  113. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:248 test path testO2JMapping("ECDH_ECDSA_WITH_AES_256_CBC_SHA384", "ECDH-ECDSA-AES256-SHA384");
  114. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:282 test path testO2JMapping("ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-RSA-CHACHA20-POLY1305");
  115. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:283 test path testO2JMapping("ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-ECDSA-CHACHA20-POLY1305");
  116. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:286 test path testO2JMapping("ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-PSK-CHACHA20-POLY1305");
  117. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:299 test path testCachedJ2OMapping("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256");
  118. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:355 test path testCachedO2JMapping("ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256");
  119. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:396 test path cipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"; // Forces SHA1 signatures
  120. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:398 test path cipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"; // Forces SHA256 signatures
  121. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:400 test path cipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"; // Forces SHA384 signatures
  122. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:402 test path cipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"; // Use GCM instead of CBC for SHA512
  123. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:406 test path cipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"; // Forces SHA1 signatures
  124. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:408 test path cipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"; // Forces SHA256 signatures
  125. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:410 test path cipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"; // Forces SHA384 signatures
  126. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:412 test path cipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"; // Use GCM instead of CBC for SHA512
  127. handler/src/test/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethodTest.java:414 test path cipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"; // Forces MD5+SHA1 signatures
  128. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:591 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-AES128-SHA");
  129. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:605 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-DES-CBC3-SHA");
  130. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:606 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-AES256-SHA");
  131. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:607 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "ECDHE-RSA-RC4-SHA");
  132. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:623 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "ECDHE-RSA-AES256-SHA");
  133. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:626 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "ECDHE-RSA-AES256-SHA");
  134. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:633 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "ECDHE-RSA-DES-CBC3-SHA");
  135. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:654 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES128-SHA");
  136. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:657 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES256-SHA384");
  137. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:661 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES128-GCM-SHA256");
  138. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:662 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES128-SHA256");
  139. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:674 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-DES-CBC3-SHA");
  140. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:675 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES256-GCM-SHA384");
  141. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:676 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-AES256-SHA");
  142. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:677 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "ECDHE-RSA-RC4-SHA");
  143. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:713 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "ECDHE-RSA-DES-CBC3-SHA");
  144. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:717 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "ECDHE-RSA-RC4-SHA");
  145. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1235 test path final String enabledCipher = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
  146. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1982 test path .ciphers(Arrays.asList("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
  147. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1983 test path "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"))
  148. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1990 test path .ciphers(Arrays.asList("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"))
  149. handler/src/test/java/io/netty/handler/ssl/OpenSslPrivateKeyMethodTest.java:75 test path private static final String RFC_CIPHER_NAME = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
  150. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:218 test path SslProtocols.TLS_v1_2, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
  151. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:632 test path final String serverCipher = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
  152. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:2296 test path final String sharedCipher = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
  153. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:2329 test path final String sharedCipher = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
  154. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:4833 test path List<String> ciphers = Collections.singletonList("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
  155. handler/src/test/java/io/netty/handler/ssl/SslHandlerTest.java:1599 test path clientCipher = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
  156. handler/src/test/java/io/netty/handler/ssl/SslHandlerTest.java:1600 test path serverCipher = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
  157. microbench/src/main/java/io/netty/microbench/handler/ssl/AbstractSslEngineBenchmark.java:138 @Param({ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" })
  158. microbench/src/main/java/io/netty/microbench/handler/ssl/AbstractSslHandlerBenchmark.java:112 @Param({ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" })
config.cipher-suite · CWE-757
DH Quantum-vulnerable Recorded traffic Renamed import 105 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:51 public static final String TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
  2. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:56 public static final String TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
  3. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:73 public static final String TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
  4. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:88 public static final String TLS_DHE_RSA_WITH_AES_256_CBC_CCM8 = "TLS_DHE_RSA_WITH_AES_256_CBC_CCM8";
  5. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:93 public static final String TLS_DHE_RSA_WITH_AES_256_CBC_CCM = "TLS_DHE_RSA_WITH_AES_256_CBC_CCM";
  6. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:108 public static final String TLS_DHE_DSS_WITH_ARIA256_GCM_SHA384 = "TLS_DHE_DSS_WITH_ARIA256_GCM_SHA384";
  7. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:113 public static final String TLS_DHE_RSA_WITH_ARIA256_GCM_SHA384 = "TLS_DHE_RSA_WITH_ARIA256_GCM_SHA384";
  8. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:133 public static final String TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
  9. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:138 public static final String TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
  10. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:153 public static final String TLS_DHE_RSA_WITH_AES_128_CBC_CCM8 = "TLS_DHE_RSA_WITH_AES_128_CBC_CCM8";
  11. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:158 public static final String TLS_DHE_RSA_WITH_AES_128_CBC_CCM = "TLS_DHE_RSA_WITH_AES_128_CBC_CCM";
  12. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:173 public static final String TLS_DHE_DSS_WITH_ARIA128_GCM_SHA256 = "TLS_DHE_DSS_WITH_ARIA128_GCM_SHA256";
  13. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:178 public static final String TLS_DHE_RSA_WITH_ARIA128_GCM_SHA256 = "TLS_DHE_RSA_WITH_ARIA128_GCM_SHA256";
  14. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:198 public static final String TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
  15. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:203 public static final String TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
  16. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:218 public static final String TLS_DHE_RSA_WITH_CAMELLIA256_SHA256 = "TLS_DHE_RSA_WITH_CAMELLIA256_SHA256";
  17. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:223 public static final String TLS_DHE_DSS_WITH_CAMELLIA256_SHA256 = "TLS_DHE_DSS_WITH_CAMELLIA256_SHA256";
  18. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:248 public static final String TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
  19. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:253 public static final String TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
  20. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:268 public static final String TLS_DHE_RSA_WITH_CAMELLIA128_SHA256 = "TLS_DHE_RSA_WITH_CAMELLIA128_SHA256";
  21. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:273 public static final String TLS_DHE_DSS_WITH_CAMELLIA128_SHA256 = "TLS_DHE_DSS_WITH_CAMELLIA128_SHA256";
  22. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:298 public static final String TLS_DHE_RSA_WITH_AES_256_CBC_SHA = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
  23. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:303 public static final String TLS_DHE_DSS_WITH_AES_256_CBC_SHA = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
  24. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:308 public static final String TLS_DHE_RSA_WITH_CAMELLIA256_SHA = "TLS_DHE_RSA_WITH_CAMELLIA256_SHA";
  25. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:313 public static final String TLS_DHE_DSS_WITH_CAMELLIA256_SHA = "TLS_DHE_DSS_WITH_CAMELLIA256_SHA";
  26. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:343 public static final String TLS_DHE_RSA_WITH_AES_128_CBC_SHA = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
  27. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:348 public static final String TLS_DHE_DSS_WITH_AES_128_CBC_SHA = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
  28. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:353 public static final String TLS_DHE_RSA_WITH_SEED_SHA = "TLS_DHE_RSA_WITH_SEED_SHA";
  29. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:358 public static final String TLS_DHE_DSS_WITH_SEED_SHA = "TLS_DHE_DSS_WITH_SEED_SHA";
  30. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:363 public static final String TLS_DHE_RSA_WITH_CAMELLIA128_SHA = "TLS_DHE_RSA_WITH_CAMELLIA128_SHA";
  31. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:368 public static final String TLS_DHE_DSS_WITH_CAMELLIA128_SHA = "TLS_DHE_DSS_WITH_CAMELLIA128_SHA";
  32. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:398 public static final String TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
  33. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:408 public static final String TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256";
  34. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:419 public static final String TLS_DHE_PSK_WITH_AES_256_CBC_CCM8 = "TLS_DHE_PSK_WITH_AES_256_CBC_CCM8";
  35. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:424 public static final String TLS_DHE_PSK_WITH_AES_256_CBC_CCM = "TLS_DHE_PSK_WITH_AES_256_CBC_CCM";
  36. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:434 public static final String TLS_DHE_PSK_WITH_ARIA256_GCM_SHA384 = "TLS_DHE_PSK_WITH_ARIA256_GCM_SHA384";
  37. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:489 public static final String TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
  38. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:494 public static final String TLS_DHE_PSK_WITH_AES_128_CBC_CCM8 = "TLS_DHE_PSK_WITH_AES_128_CBC_CCM8";
  39. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:499 public static final String TLS_DHE_PSK_WITH_AES_128_CBC_CCM = "TLS_DHE_PSK_WITH_AES_128_CBC_CCM";
  40. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:509 public static final String TLS_DHE_PSK_WITH_ARIA128_GCM_SHA256 = "TLS_DHE_PSK_WITH_ARIA128_GCM_SHA256";
  41. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:604 public static final String TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
  42. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:614 public static final String TLS_DHE_PSK_WITH_AES_256_CBC_SHA = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
  43. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:629 public static final String TLS_DHE_PSK_WITH_CAMELLIA256_SHA384 = "TLS_DHE_PSK_WITH_CAMELLIA256_SHA384";
  44. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:689 public static final String TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
  45. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:699 public static final String TLS_DHE_PSK_WITH_AES_128_CBC_SHA = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
  46. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:714 public static final String TLS_DHE_PSK_WITH_CAMELLIA128_SHA256 = "TLS_DHE_PSK_WITH_CAMELLIA128_SHA256";
  47. handler/src/test/java/io/netty/handler/ssl/CipherSuiteCanaryTest.java:75 test path dst.addAll(expand("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256")); // DHE-RSA-AES128-GCM-SHA256
  48. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:41 test path testJ2OMapping("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "DHE-RSA-AES128-SHA256");
  49. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:42 test path testJ2OMapping("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", "DHE-DSS-AES128-SHA256");
  50. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:48 test path testJ2OMapping("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "DHE-RSA-AES128-SHA");
  51. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:49 test path testJ2OMapping("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "DHE-DSS-AES128-SHA");
  52. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:55 test path testJ2OMapping("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", "DHE-RSA-AES128-GCM-SHA256");
  53. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:56 test path testJ2OMapping("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", "DHE-DSS-AES128-GCM-SHA256");
  54. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:62 test path testJ2OMapping("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "DHE-RSA-DES-CBC3-SHA");
  55. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:63 test path testJ2OMapping("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "DHE-DSS-DES-CBC3-SHA");
  56. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:79 test path testJ2OMapping("SSL_DHE_RSA_WITH_DES_CBC_SHA", "DHE-RSA-DES-CBC-SHA");
  57. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:80 test path testJ2OMapping("SSL_DHE_DSS_WITH_DES_CBC_SHA", "DHE-DSS-DES-CBC-SHA");
  58. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:83 test path testJ2OMapping("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "EXP-DHE-RSA-DES-CBC-SHA");
  59. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:84 test path testJ2OMapping("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", "EXP-DHE-DSS-DES-CBC-SHA");
  60. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:107 test path testJ2OMapping("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", "DHE-DSS-AES256-SHA");
  61. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:108 test path testJ2OMapping("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", "DHE-RSA-AES256-SHA");
  62. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:123 test path testJ2OMapping("TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "DHE-RSA-CHACHA20-POLY1305");
  63. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:126 test path testJ2OMapping("TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "DHE-PSK-CHACHA20-POLY1305");
  64. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:147 test path testO2JMapping("DHE_RSA_WITH_AES_128_CBC_SHA256", "DHE-RSA-AES128-SHA256");
  65. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:148 test path testO2JMapping("DHE_DSS_WITH_AES_128_CBC_SHA256", "DHE-DSS-AES128-SHA256");
  66. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:154 test path testO2JMapping("DHE_RSA_WITH_AES_128_CBC_SHA", "DHE-RSA-AES128-SHA");
  67. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:155 test path testO2JMapping("DHE_DSS_WITH_AES_128_CBC_SHA", "DHE-DSS-AES128-SHA");
  68. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:161 test path testO2JMapping("DHE_RSA_WITH_AES_128_GCM_SHA256", "DHE-RSA-AES128-GCM-SHA256");
  69. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:162 test path testO2JMapping("DHE_DSS_WITH_AES_128_GCM_SHA256", "DHE-DSS-AES128-GCM-SHA256");
  70. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:168 test path testO2JMapping("DHE_RSA_WITH_3DES_EDE_CBC_SHA", "DHE-RSA-DES-CBC3-SHA");
  71. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:169 test path testO2JMapping("DHE_DSS_WITH_3DES_EDE_CBC_SHA", "DHE-DSS-DES-CBC3-SHA");
  72. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:185 test path testO2JMapping("DHE_RSA_WITH_DES_CBC_SHA", "DHE-RSA-DES-CBC-SHA");
  73. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:186 test path testO2JMapping("DHE_DSS_WITH_DES_CBC_SHA", "DHE-DSS-DES-CBC-SHA");
  74. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:189 test path testO2JMapping("DHE_RSA_EXPORT_WITH_DES_CBC_40_SHA", "EXP-DHE-RSA-DES-CBC-SHA");
  75. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:190 test path testO2JMapping("DHE_DSS_EXPORT_WITH_DES_CBC_40_SHA", "EXP-DHE-DSS-DES-CBC-SHA");
  76. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:213 test path testO2JMapping("DHE_DSS_WITH_AES_256_CBC_SHA", "DHE-DSS-AES256-SHA");
  77. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:214 test path testO2JMapping("DHE_RSA_WITH_AES_256_CBC_SHA", "DHE-RSA-AES256-SHA");
  78. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:226 test path testO2JMapping("EDH_DSS_WITH_3DES_EDE_CBC_SHA", "EDH-DSS-DES-CBC3-SHA");
  79. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:239 test path testO2JMapping("DHE_DSS_WITH_AES_256_GCM_SHA384", "DHE-DSS-AES256-GCM-SHA384");
  80. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:240 test path testO2JMapping("DHE_RSA_WITH_AES_256_GCM_SHA384", "DHE-RSA-AES256-GCM-SHA384");
  81. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:241 test path testO2JMapping("DHE_RSA_WITH_AES_256_CBC_SHA256", "DHE-RSA-AES256-SHA256");
  82. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:242 test path testO2JMapping("DHE_DSS_WITH_AES_256_CBC_SHA256", "DHE-DSS-AES256-SHA256");
  83. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:243 test path testO2JMapping("DHE_RSA_WITH_CAMELLIA256_SHA", "DHE-RSA-CAMELLIA256-SHA");
  84. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:244 test path testO2JMapping("DHE_DSS_WITH_CAMELLIA256_SHA", "DHE-DSS-CAMELLIA256-SHA");
  85. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:253 test path testO2JMapping("DHE_RSA_WITH_SEED_SHA", "DHE-RSA-SEED-SHA");
  86. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:254 test path testO2JMapping("DHE_DSS_WITH_SEED_SHA", "DHE-DSS-SEED-SHA");
  87. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:255 test path testO2JMapping("DHE_RSA_WITH_CAMELLIA128_SHA", "DHE-RSA-CAMELLIA128-SHA");
  88. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:256 test path testO2JMapping("DHE_DSS_WITH_CAMELLIA128_SHA", "DHE-DSS-CAMELLIA128-SHA");
  89. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:257 test path testO2JMapping("EDH_RSA_WITH_3DES_EDE_CBC_SHA", "EDH-RSA-DES-CBC3-SHA");
  90. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:274 test path testO2JMapping("EDH_RSA_WITH_DES_CBC_SHA", "EDH-RSA-DES-CBC-SHA");
  91. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:275 test path testO2JMapping("EDH_DSS_WITH_DES_CBC_SHA", "EDH-DSS-DES-CBC-SHA");
  92. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:277 test path testO2JMapping("EDH_RSA_EXPORT_WITH_DES_CBC_40_SHA", "EXP-EDH-RSA-DES-CBC-SHA");
  93. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:278 test path testO2JMapping("EDH_DSS_EXPORT_WITH_DES_CBC_40_SHA", "EXP-EDH-DSS-DES-CBC-SHA");
  94. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:284 test path testO2JMapping("DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "DHE-RSA-CHACHA20-POLY1305");
  95. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:287 test path testO2JMapping("DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "DHE-PSK-CHACHA20-POLY1305");
  96. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:599 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1, "EDH-RSA-DES-CBC3-SHA");
  97. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:634 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_1, "EDH-RSA-DES-CBC3-SHA");
  98. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:668 test path testWrapWithDifferentSizes(param, SslProtocols.TLS_v1_2, "EDH-RSA-DES-CBC3-SHA");
  99. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:698 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-AES256-SHA");
  100. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:704 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "EDH-RSA-DES-CBC3-SHA");
  101. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:707 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-AES128-SHA");
  102. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:711 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-SEED-SHA");
  103. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:715 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-CAMELLIA256-SHA");
  104. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:716 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-CAMELLIA128-SHA");
  105. handler/src/test/java/io/netty/handler/ssl/SslUtilsTest.java:84 test path assertFalse(SslUtils.isTLSv13Cipher("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"));
config.cipher-suite · CWE-757
RSA2048-bit Quantum-vulnerable 15 places See details

X.509 certificate

A PEM certificate. The subject public-key algorithm and key size are read from the SubjectPublicKeyInfo structure, and the not-after date is reported so certificates that outlive the migration window are visible.

This is a digital identity document. Its expiry date matters: one valid for many years locks in today's algorithms for that long.

What to do. Shorten certificate lifetimes so re-issuing with a post-quantum key is routine.

  1. handler/src/main/java/io/netty/handler/ssl/util/FingerprintTrustManagerFactory.java:60 -----BEGIN CERTIFICATE-----
  2. handler/src/test/resources/io/netty/handler/ssl/localhost_server.pem:1 test path -----BEGIN CERTIFICATE-----
  3. handler/src/test/resources/io/netty/handler/ssl/mutual_auth_ca.pem:1 test path -----BEGIN CERTIFICATE-----
  4. handler/src/test/resources/io/netty/handler/ssl/notlocalhost_server.pem:1 test path -----BEGIN CERTIFICATE-----
  5. handler/src/test/resources/io/netty/handler/ssl/test.crt:1 test path -----BEGIN CERTIFICATE-----
  6. handler/src/test/resources/io/netty/handler/ssl/test2.crt:1 test path -----BEGIN CERTIFICATE-----
  7. handler/src/test/resources/io/netty/handler/ssl/tm_test_ca_1a.pem:1 test path -----BEGIN CERTIFICATE-----
  8. handler/src/test/resources/io/netty/handler/ssl/tm_test_ca_1b.pem:1 test path -----BEGIN CERTIFICATE-----
  9. handler/src/test/resources/io/netty/handler/ssl/tm_test_ca_2.pem:1 test path -----BEGIN CERTIFICATE-----
  10. handler/src/test/resources/io/netty/handler/ssl/tm_test_eec_1.pem:1 test path -----BEGIN CERTIFICATE-----
  11. handler/src/test/resources/io/netty/handler/ssl/tm_test_eec_2.pem:1 test path -----BEGIN CERTIFICATE-----
  12. handler/src/test/resources/io/netty/handler/ssl/tm_test_eec_3.pem:1 test path -----BEGIN CERTIFICATE-----
  13. microbench/src/main/resources/io/netty/microbench/handler/ssl/test.crt:1 test path -----BEGIN CERTIFICATE-----
  14. transport-blockhound-tests/src/test/resources/io/netty/util/internal/localhost_server.pem:1 test path -----BEGIN CERTIFICATE-----
  15. transport-blockhound-tests/src/test/resources/io/netty/util/internal/mutual_auth_ca.pem:1 test path -----BEGIN CERTIFICATE-----
pem.certificate
Ed25519255-bitother/Ed25519 Quantum-vulnerable 9 places See details

JOSE algorithm declared in configuration

An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

jose.algorithm · CWE-327
RSA2048-bit Quantum-vulnerable Recorded traffic 7 places See details

Private key committed to the repository

A PEM private-key block. The header names the algorithm where the format is the legacy one; for PKCS#8 the algorithm OID is read out of the DER. A private key in version control is a present-day incident before it is a quantum question.

A secret key is stored in this repository's files. Anyone who can read the repository can use it. This needs attention today, regardless of quantum computers.

What to do. Revoke and rotate the key, then keep key material out of the repository. Record the algorithm in the inventory.

pem.private-key · CWE-321, CWE-327
TLS Quantum-vulnerable Recorded traffic From a constant 6 places See details

TLS context created in code

`SSLContext.getInstance()`. The protocol version is reported; the key exchange it negotiates is classical in every TLS 1.2 and 1.3 cipher suite available today.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Every TLS cipher suite in general use negotiates a classical key exchange, so a recorded session is decryptable once that exchange falls.

What to do. Keep TLS 1.3, and track the hybrid key-exchange groups as they reach the JDK. TLS is where harvest-now-decrypt-later exposure is largest.

  1. handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java:100 context = SSLContext.getInstance(PROTOCOL);
  2. handler/src/main/java/io/netty/handler/ssl/OpenSslX509TrustManagerWrapper.java:161 return SSLContext.getInstance("TLS", "SunJSSE");
  3. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:236 context = SSLContext.getInstance("TLS");
  4. handler/src/main/java/io/netty/handler/ssl/SslUtils.java:238 context = SSLContext.getInstance("TLS", provider);
  5. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:4606 test path SSLContext sslContext = SSLContext.getInstance("TLS");
  6. handler/src/test/java/io/netty/handler/ssl/SslContextTest.java:117 test path SSLContext jdkSslContext = SSLContext.getInstance("TLS");
java.sslcontext · CWE-757
EdDSA Quantum-vulnerable 5 places See details

JOSE algorithm declared in configuration

An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

jose.algorithm · CWE-327
DSA Quantum-vulnerable 3 places See details

Private key committed to the repository

A PEM private-key block. The header names the algorithm where the format is the legacy one; for PKCS#8 the algorithm OID is read out of the DER. A private key in version control is a present-day incident before it is a quantum question.

A secret key is stored in this repository's files. Anyone who can read the repository can use it. This needs attention today, regardless of quantum computers.

What to do. Revoke and rotate the key, then keep key material out of the repository. Record the algorithm in the inventory.

pem.private-key · CWE-321, CWE-327
RSA Quantum-vulnerable Recorded traffic 3 places See details

Private key committed to the repository

A PEM private-key block. The header names the algorithm where the format is the legacy one; for PKCS#8 the algorithm OID is read out of the DER. A private key in version control is a present-day incident before it is a quantum question.

A secret key is stored in this repository's files. Anyone who can read the repository can use it. This needs attention today, regardless of quantum computers.

What to do. Revoke and rotate the key, then keep key material out of the repository. Record the algorithm in the inventory.

pem.private-key · CWE-321, CWE-327
ECDSA256-bitsecg/secp256r1 Quantum-vulnerable 2 places See details

X.509 certificate

A PEM certificate. The subject public-key algorithm and key size are read from the SubjectPublicKeyInfo structure, and the not-after date is reported so certificates that outlive the migration window are visible.

This is a digital identity document. Its expiry date matters: one valid for many years locks in today's algorithms for that long.

What to do. Shorten certificate lifetimes so re-issuing with a post-quantum key is routine.

pem.certificate
RSA Quantum-vulnerable 2 places See details

Classical signature algorithm through the JCA

`Signature.getInstance()` with a classical algorithm. The digest and the key algorithm are split out of the JCA name, so `SHA1withRSA` reports both the broken digest and the quantum-vulnerable key.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. ML-DSA-65 (FIPS 204). Where the verifier cannot be changed, sign twice and publish both signatures.

  1. codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelConnectTest.java:1656 test path signature = Signature.getInstance("SHA256withRSA");
  2. handler/src/test/java/io/netty/handler/ssl/OpenSslPrivateKeyMethodTest.java:212 test path signature = Signature.getInstance("SHA256withRSA");
java.signature · CWE-327
RSA-PSS Quantum-vulnerable 2 places See details

Classical signature algorithm through the JCA

`Signature.getInstance()` with a classical algorithm. The digest and the key algorithm are split out of the JCA name, so `SHA1withRSA` reports both the broken digest and the quantum-vulnerable key.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. ML-DSA-65 (FIPS 204). Where the verifier cannot be changed, sign twice and publish both signatures.

  1. codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelConnectTest.java:1658 test path signature = Signature.getInstance("RSASSA-PSS");
  2. handler/src/test/java/io/netty/handler/ssl/OpenSslPrivateKeyMethodTest.java:214 test path signature = Signature.getInstance("RSASSA-PSS");
java.signature · CWE-327
DSA Quantum-vulnerable 1 place See details

Classical key material handled through the JCA

`KeyFactory.getInstance()` for a classical algorithm. This indicates the code parses or produces keys of that family, which is a migration surface even where it does no cryptography itself.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. Include this code path in the inventory: it has to accept post-quantum key encodings before the keys themselves can change.

  1. handler/src/main/java/io/netty/handler/ssl/SslContext.java:1299 return KeyFactory.getInstance("DSA").generatePrivate(encodedKeySpec);
java.keyfactory · CWE-327
EC Quantum-vulnerable 1 place See details

Classical key material handled through the JCA

`KeyFactory.getInstance()` for a classical algorithm. This indicates the code parses or produces keys of that family, which is a migration surface even where it does no cryptography itself.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. An elliptic-curve key pair. The source does not say whether it signs or agrees a shared secret, and the curve alone cannot: the same curve serves both.

What to do. Include this code path in the inventory: it has to accept post-quantum key encodings before the keys themselves can change.

  1. handler/src/main/java/io/netty/handler/ssl/SslContext.java:1302 return KeyFactory.getInstance("EC").generatePrivate(encodedKeySpec);
java.keyfactory · CWE-327
EC256-bitsecg/secp256r1 Quantum-vulnerable 1 place See details

Named elliptic curve requested

`ECGenParameterSpec` names a curve explicitly. Every standardised prime curve is broken by Shor regardless of its size, so a larger curve is not a mitigation.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. An elliptic-curve key pair. The source does not say whether it signs or agrees a shared secret, and the curve alone cannot: the same curve serves both.

What to do. ML-DSA-65 for signatures, ML-KEM-768 for key establishment.

  1. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:955 ecp256("EC", new ECGenParameterSpec("secp256r1"), "SHA256withECDSA"),
java.eccurve · CWE-327
EC384-bitsecg/secp384r1 Quantum-vulnerable 1 place See details

Named elliptic curve requested

`ECGenParameterSpec` names a curve explicitly. Every standardised prime curve is broken by Shor regardless of its size, so a larger curve is not a mitigation.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. An elliptic-curve key pair. The source does not say whether it signs or agrees a shared secret, and the curve alone cannot: the same curve serves both.

What to do. ML-DSA-65 for signatures, ML-KEM-768 for key establishment.

  1. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:962 ecp384("EC", new ECGenParameterSpec("secp384r1"), "SHA384withECDSA"),
java.eccurve · CWE-327
ECDSA Quantum-vulnerable 1 place See details

X.509 certificate

A PEM certificate. The subject public-key algorithm and key size are read from the SubjectPublicKeyInfo structure, and the not-after date is reported so certificates that outlive the migration window are visible.

This is a digital identity document. Its expiry date matters: one valid for many years locks in today's algorithms for that long.

What to do. Shorten certificate lifetimes so re-issuing with a post-quantum key is routine.

pem.certificate
RSA Quantum-vulnerable Recorded traffic 1 place See details

Classical key material handled through the JCA

`KeyFactory.getInstance()` for a classical algorithm. This indicates the code parses or produces keys of that family, which is a migration surface even where it does no cryptography itself.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. Include this code path in the inventory: it has to accept post-quantum key encodings before the keys themselves can change.

  1. handler/src/main/java/io/netty/handler/ssl/SslContext.java:1296 return KeyFactory.getInstance("RSA").generatePrivate(encodedKeySpec);
java.keyfactory · CWE-327
RSA Quantum-vulnerable Recorded traffic From a constant 1 place See details

Classical key pair generated through the JCA

`KeyPairGenerator.getInstance()` with a classical algorithm. The concrete family and, where an `initialize()` call is close enough to read, the key size are resolved from the source and reported on the finding.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. Generate the classical key alongside an ML-KEM or ML-DSA key and carry both until relying parties accept the post-quantum one.

  1. handler/src/main/java/io/netty/handler/ssl/util/SelfSignedCertificate.java:488 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(algorithm);
java.keypairgenerator · CWE-327
RSA2048-bit Quantum-vulnerable Recorded traffic 1 place See details

Classical key pair generated through the JCA

`KeyPairGenerator.getInstance()` with a classical algorithm. The concrete family and, where an `initialize()` call is close enough to read, the key size are resolved from the source and reported on the finding.

A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer.

What to do. Generate the classical key alongside an ML-KEM or ML-DSA key and carry both until relying parties accept the post-quantum one.

  1. handler/src/test/java/io/netty/handler/ssl/util/OpenJdkSelfSignedCertGeneratorTest.java:37 test path KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
java.keypairgenerator · CWE-327
SHA-256 Reduced margin From a constant 7 places See details

Hash algorithm through the JCA

`MessageDigest.getInstance()`. MD5 and SHA-1 are reported as already broken; SHA-256 is reported as a reduced margin rather than a defect.

A quantum computer weakens this but does not break it. Increasing the key or digest size restores the margin. Pre-image resistance falls to about 128 bits of quantum work. Adequate for most uses; SHA-384 restores the full margin where a signature must last decades.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something that must remain verifiable for decades.

  1. codec-classes-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java:61 Mac mac = Mac.getInstance(ALGORITHM);
  2. codec-compression/src/test/java/io/netty/handler/codec/compression/AbstractIntegrationTest.java:200 test path MessageDigest digest = MessageDigest.getInstance("SHA-256");
  3. codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelConnectTest.java:1656 test path signature = Signature.getInstance("SHA256withRSA");
  4. common/src/main/java/io/netty/util/internal/NativeLibraryLoader.java:280 MessageDigest md = MessageDigest.getInstance("SHA-256");
  5. handler/src/test/java/io/netty/handler/ssl/OpenSslPrivateKeyMethodTest.java:212 test path signature = Signature.getInstance("SHA256withRSA");
  6. testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketChannelEOFTest.java:104 test path MessageDigest digest = MessageDigest.getInstance("SHA-256");
  7. testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketChannelEOFTest.java:130 test path this.digest = MessageDigest.getInstance("SHA-256");
java.messagedigest · CWE-328
SHA-256 Reduced margin 3 places See details

Mask-generation digest named for RSA padding

`MGF1ParameterSpec.SHA256` names the digest inside RSA-OAEP and RSA-PSS padding. It is a separate choice from the digest the signature or the cipher uses, it is frequently left at SHA-1 by default, and a static import of it - `import static java.security.spec.MGF1ParameterSpec.SHA512` - is the only place the choice appears in the file that makes it.

This picks the hash used inside RSA padding. It matters because the default is often SHA-1, which is broken today without any quantum computer.

What to do. The mask-generation digest travels with the RSA key it pads. When that key moves to ML-KEM or ML-DSA the padding goes with it; until then, SHA-256 or better.

  1. codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelConnectTest.java:1659 test path signature.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256,
  2. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:219 configurePssParameters(signature, MGF1ParameterSpec.SHA256, 32);
  3. handler/src/test/java/io/netty/handler/ssl/OpenSslPrivateKeyMethodTest.java:215 test path signature.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256,
java.mgf1 · CWE-327
AES Reduced margin 2 places See details

Key material constructed for a named algorithm

`new SecretKeySpec(bytes, "AES")` and the other key-spec constructors name the algorithm as an argument rather than through `getInstance()`. Code that wraps raw bytes into a key this way often never calls `getInstance()` at all, so the algorithm is invisible to a scan that only looks at the factories.

This wraps raw bytes into a key for a named algorithm. It is part of the same migration as whatever uses that key.

What to do. Wherever this key is used, the same migration applies as to the call that consumes it. Trace it to the operation and treat the two together.

  1. handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslEngine.java:463 return new SecretKeySpec(SSL.getMasterKey(ssl), "AES");
  2. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1359 test path SecretKeySpec secretKey = new SecretKeySpec(clientWriteKey, "AES");
java.keyspec · CWE-327
AES Reduced margin 2 places See details

Classical public-key cipher through the JCA

`Cipher.getInstance()` with a transformation whose algorithm component is a public-key or legacy symmetric cipher. The transformation string is parsed into algorithm, mode and padding, so `RSA/ECB/PKCS1Padding` is separated from `RSA/ECB/OAEPWithSHA-256AndMGF1Padding`.

A quantum computer weakens this but does not break it. Increasing the key or digest size restores the margin. Grover's algorithm halves the effective strength; the parameter, not the design, is the problem. The key size was not visible at this call site, so the weaker case is assumed.

What to do. For RSA encryption, move to ML-KEM-768 and keep RSA-OAEP only as the classical half of a hybrid during transition.

  1. handler/src/test/java/io/netty/handler/ssl/AmazonCorrettoSslEngineTest.java:66 test path String providerName = Cipher.getInstance("AES/GCM/NoPadding").getProvider().getName();
  2. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:1361 test path Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
java.cipher · CWE-327
PBKDF2 Reduced margin 1 place See details

Key material constructed for a named algorithm

`new SecretKeySpec(bytes, "AES")` and the other key-spec constructors name the algorithm as an argument rather than through `getInstance()`. Code that wraps raw bytes into a key this way often never calls `getInstance()` at all, so the algorithm is invisible to a scan that only looks at the factories.

This wraps raw bytes into a key for a named algorithm. It is part of the same migration as whatever uses that key.

What to do. Wherever this key is used, the same migration applies as to the call that consumes it. Trace it to the operation and treat the two together.

  1. handler/src/main/java/io/netty/handler/ssl/SslContext.java:1180 PBEKeySpec pbeKeySpec = new PBEKeySpec(password);
java.keyspec · CWE-327
SHA-256 Reduced margin 1 place See details

Digest through BouncyCastle

A BouncyCastle digest class. The digest name is read from the class, so `MD5Digest` and `SHA512Digest` are the same rule with opposite conclusions.

A quantum computer weakens this but does not break it. Increasing the key or digest size restores the margin. Pre-image resistance falls to about 128 bits of quantum work. Adequate for most uses; SHA-384 restores the full margin where a signature must last decades.

What to do. SHA-256 as the floor, SHA-384 where the digest protects something long-lived. MD5 and SHA-1 need replacing now.

  1. example/src/main/java/io/netty/example/ocsp/Digester.java:48 test path Digest digest = new SHA256Digest();
java.bouncycastle.digest · CWE-328
unknown Could not be determined 10 places See details

Key pair algorithm chosen at runtime

`KeyPairGenerator.getInstance(x)` where the argument is an identifier. The algorithm cannot be resolved without running the program, so this is reported as an unknown rather than assumed to be classical.

This code picks its encryption method while it runs, so a scan cannot tell which one it ends up using. Somebody has to check the configuration.

What to do. Trace the value to its configuration source and record the concrete algorithm in the cryptographic inventory by hand.

  1. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:124 Signature signature = Signature.getInstance(jdkAlgorithm, cachedProviderName);
  2. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:159 Signature signature = Signature.getInstance(jdkAlgorithm);
  3. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:186 Signature signature = Signature.getInstance(jdkAlgorithm, provider);
  4. handler/src/main/java/io/netty/handler/ssl/SslContext.java:1183 Cipher cipher = Cipher.getInstance(pbeAlgorithm);
  5. handler/src/test/java/io/netty/handler/ssl/MockAlternativeKeyProvider.java:123 test path this.realSignature = Signature.getInstance(algorithm, providerName);
  6. pkitesting/src/main/java/io/netty/pkitesting/Algorithms.java:91 keyGen = KeyPairGenerator.getInstance(keyType);
  7. pkitesting/src/main/java/io/netty/pkitesting/Algorithms.java:93 keyGen = KeyPairGenerator.getInstance(keyType, provider);
  8. pkitesting/src/main/java/io/netty/pkitesting/Algorithms.java:107 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyType, bouncyCastle());
  9. pkitesting/src/main/java/io/netty/pkitesting/Algorithms.java:119 return Signature.getInstance(algorithmIdentifier);
  10. pkitesting/src/main/java/io/netty/pkitesting/Algorithms.java:122 return Signature.getInstance(algorithmIdentifier, provider != null ? provider : bouncyCastle());
java.keypairgenerator.variable · CWE-327
unknown Could not be determined 9 places See details

Key store holding classical key material

`KeyStore.getInstance("JKS"|"PKCS12"|"BCFKS")`. The store format itself is not the issue; it is the inventory point where the classical private keys of this application live.

This is the application's key cupboard. It is worth knowing what is in it before planning any replacement.

What to do. Record which keys this store holds. A key store is where a migration either happens or silently does not.

  1. .github/scripts/musl-verify/QuicMuslCheck.java:209 KeyStore keyStore = KeyStore.getInstance("PKCS12");
  2. handler/src/test/java/io/netty/handler/ssl/OpenSslKeyMaterialProviderTest.java:59 test path final KeyStore keystore = KeyStore.getInstance("PKCS12");
  3. handler/src/test/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactoryProviderTest.java:27 test path final KeyStore keystore = KeyStore.getInstance("PKCS12");
  4. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:737 test path final KeyStore serverKeyStore = KeyStore.getInstance("PKCS12");
  5. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:741 test path final KeyStore clientKeyStore = KeyStore.getInstance("PKCS12");
  6. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:769 test path final KeyStore serverKeyStore = KeyStore.getInstance("PKCS12");
  7. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:773 test path final KeyStore clientKeyStore = KeyStore.getInstance("PKCS12");
  8. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:4735 test path final KeyStore serverKeyStore = KeyStore.getInstance("PKCS12");
  9. handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java:4740 test path final KeyStore clientKeyStore = KeyStore.getInstance("PKCS12");
java.keystore
SEED Could not be determined 6 places See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:353 public static final String TLS_DHE_RSA_WITH_SEED_SHA = "TLS_DHE_RSA_WITH_SEED_SHA";
  2. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:358 public static final String TLS_DHE_DSS_WITH_SEED_SHA = "TLS_DHE_DSS_WITH_SEED_SHA";
  3. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:724 public static final String TLS_RSA_WITH_SEED_SHA = "TLS_RSA_WITH_SEED_SHA";
  4. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:253 test path testO2JMapping("DHE_RSA_WITH_SEED_SHA", "DHE-RSA-SEED-SHA");
  5. handler/src/test/java/io/netty/handler/ssl/CipherSuiteConverterTest.java:254 test path testO2JMapping("DHE_DSS_WITH_SEED_SHA", "DHE-DSS-SEED-SHA");
  6. handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java:711 test path testWrapWithDifferentSizes(param, SslProtocols.SSL_v3, "DHE-RSA-SEED-SHA");
config.cipher-suite · CWE-757
unknown Could not be determined 6 places See details

Private key committed to the repository

A PEM private-key block. The header names the algorithm where the format is the legacy one; for PKCS#8 the algorithm OID is read out of the DER. A private key in version control is a present-day incident before it is a quantum question.

A secret key is stored in this repository's files. Anyone who can read the repository can use it. This needs attention today, regardless of quantum computers.

What to do. Revoke and rotate the key, then keep key material out of the repository. Record the algorithm in the inventory.

pem.private-key · CWE-321, CWE-327
IDEA Could not be determined 1 place See details

TLS cipher suite named in source

A cipher suite written into the code rather than into a configuration file - `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, or the OpenSSL spelling `ECDHE-RSA-AES128-GCM-SHA256`. The key exchange is reported, and the bulk cipher separately when it is one of the broken ones.

This code names the exact cryptography its TLS connections may use. Because the list is in the program rather than in a settings file, changing it needs a new release - which is the thing that makes a migration slow.

What to do. A hardcoded suite list ships with the binary and cannot be changed without a release, so move it to configuration first. The key exchange changes when the TLS library offers a hybrid group, not before.

  1. handler/src/main/java/io/netty/handler/ssl/Ciphers.java:734 public static final String TLS_RSA_WITH_IDEA_CBC_SHA = "TLS_RSA_WITH_IDEA_CBC_SHA";
config.cipher-suite · CWE-757
unknown Could not be determined 1 place See details

Non-cryptographic randomness near key material

`new Random()` or `Math.random()` in a file that also imports `java.security`, `javax.crypto` or BouncyCastle. `java.util.Random` is a linear congruential generator and its output is predictable from a handful of samples. The import check is what keeps this from firing on every retry jitter and test fixture in the tree.

Part of this code uses a predictable source of random numbers. If any key comes from it, that key can be guessed today, with no quantum computer needed.

What to do. `java.security.SecureRandom`. This is a classical defect, not a quantum one, and it is worth fixing first.

java.random.insecure · CWE-338
unknown Could not be determined 1 place See details

Release signed by the build

`apksigner sign`, `jarsigner`, `codesign` or `signtool` in a build script or a CI workflow. The key it uses signs what customers install, so it outlives every key inside the application and is usually the last one anybody thinks to migrate. The algorithm is deliberately not claimed: a keystore can hold RSA, DSA or EC and the command does not say which.

This is where a release gets signed. The signing key is not in the code, but the code says it exists - and a signing key is usually the hardest one to replace.

What to do. Find the key this command loads and record its algorithm in the inventory. Platform signing formats move on the platform's schedule, not yours, so the useful work now is knowing which key it is and who holds it.

  1. common/src/main/java/io/netty/util/internal/NativeLibraryLoader.java:339 tryExec("codesign -s - " + libraryFile.getAbsolutePath());
build.code-signing · CWE-327
unknown Could not be determined 3 places See details

Cryptographic library in the dependency manifest

A dependency known to implement classical asymmetric cryptography. Its presence is inventory, not a finding about this codebase: the library may never be called with a quantum-vulnerable algorithm.

The project depends on a cryptography library. Listed so the inventory is complete; it is not by itself a problem.

What to do. Check the version. Several of these libraries have shipped ML-KEM and ML-DSA support since 2024, so the migration may need an upgrade rather than a replacement.

  1. example/pom.xml:235 test path <artifactId>bcprov-jdk18on</artifactId>
  2. pkitesting/pom.xml:47 <artifactId>bcprov-jdk18on</artifactId>
  3. testsuite-jpms/pom.xml:210 test path <artifactId>bcprov-jdk18on</artifactId>
dep.crypto-library
CSPRNG Quantum-safe Renamed import 13 places See details

Random number generation

`SecureRandom`. A platform CSPRNG is not a quantum exposure; it is recorded because an inventory that omits the randomness source is incomplete. `SHA1PRNG` is named explicitly where it appears, since it is a legacy algorithm even though its output is adequate.

This is where the software gets its random numbers. Quantum computers do not weaken it.

What to do. No action. Prefer the platform default over naming an algorithm.

  1. codec-classes-quic/src/main/java/io/netty/handler/codec/quic/ConnectionIdChannelMap.java:32 private static final SecureRandom random = new SecureRandom();
  2. codec-classes-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java:39 SecureRandom rng = new SecureRandom();
  3. codec-classes-quic/src/main/java/io/netty/handler/codec/quic/SecureRandomQuicConnectionIdGenerator.java:24 private static final SecureRandom RANDOM = new SecureRandom();
  4. codec-http/src/test/java/io/netty/handler/codec/http/multipart/AbstractMemoryHttpDataTest.java:126 test path Random random = new SecureRandom();
  5. common/src/main/java/io/netty/util/internal/ThreadLocalRandom.java:90 final SecureRandom random = new SecureRandom(); // Get the real random seed from /dev/random
  6. example/src/main/java/io/netty/example/ocsp/OcspRequestBuilder.java:45 test path private static final SecureRandom GENERATOR = new SecureRandom();
  7. handler-ssl-ocsp/src/main/java/io/netty/handler/ssl/ocsp/OcspClient.java:93 private static final SecureRandom SECURE_RANDOM = new SecureRandom();
  8. handler/src/main/java/io/netty/handler/ssl/BouncyCastleAlpnSslUtils.java:63 SSLContext context = getSSLContext(BouncyCastleUtil.getBcProviderJsse(), new SecureRandom());
  9. handler/src/test/java/io/netty/handler/ssl/BouncyCastleEngineAlpnTest.java:35 test path SSLContext context = SslUtils.getSSLContext(bouncyCastleProvider, new SecureRandom());
  10. handler/src/test/java/io/netty/handler/ssl/util/OpenJdkSelfSignedCertGeneratorTest.java:36 test path SecureRandom random = new SecureRandom();
  11. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:1363 private static final SecureRandom RANDOM = new SecureRandom();
  12. pkitesting/src/test/java/io/netty/pkitesting/CertificateBuilderTest.java:72 test path private static final SecureRandom RNG = new SecureRandom();
  13. resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryIdSpace.java:36 private final SecureRandom random = new SecureRandom();
java.rng
HMAC Quantum-safe From a constant 1 place See details

Key material constructed for a named algorithm

`new SecretKeySpec(bytes, "AES")` and the other key-spec constructors name the algorithm as an argument rather than through `getInstance()`. Code that wraps raw bytes into a key this way often never calls `getInstance()` at all, so the algorithm is invisible to a scan that only looks at the factories.

This wraps raw bytes into a key for a named algorithm. It is part of the same migration as whatever uses that key.

What to do. Wherever this key is used, the same migration applies as to the call that consumes it. Trace it to the operation and treat the two together.

  1. codec-classes-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java:60 SecretKeySpec keySpec = new SecretKeySpec(key, ALGORITHM);
java.keyspec · CWE-327
HMAC Quantum-safe From a constant 1 place See details

Message authentication code through the JCA

`Mac.getInstance()`. HMAC is not broken by Shor and is only marginally affected by Grover; it is inventoried, not flagged, unless the underlying digest is broken.

This is a fingerprint used to prove a message was not altered. Quantum computers do not break it.

What to do. No action beyond avoiding HmacMD5 and HmacSHA1.

java.mac
ML-DSA-44 Quantum-safe 1 place See details

JOSE algorithm declared in configuration

An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.

No known quantum attack changes how strong this is. No known quantum algorithm changes the security margin.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

  1. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:1012 mlDsa44("ML-DSA", namedParameterSpec("ML-DSA-44"), "ML-DSA-44"),
jose.algorithm · CWE-327
ML-DSA-65 Quantum-safe 1 place See details

JOSE algorithm declared in configuration

An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.

No known quantum attack changes how strong this is. No known quantum algorithm changes the security margin.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

  1. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:1020 mlDsa65("ML-DSA", namedParameterSpec("ML-DSA-65"), "ML-DSA-65"),
jose.algorithm · CWE-327
ML-DSA-87 Quantum-safe 1 place See details

JOSE algorithm declared in configuration

An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.

No known quantum attack changes how strong this is. No known quantum algorithm changes the security margin.

What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.

  1. pkitesting/src/main/java/io/netty/pkitesting/CertificateBuilder.java:1028 mlDsa87("ML-DSA", namedParameterSpec("ML-DSA-87"), "ML-DSA-87"),
jose.algorithm · CWE-327
SHA-384 Quantum-safe 1 place See details

Mask-generation digest named for RSA padding

`MGF1ParameterSpec.SHA256` names the digest inside RSA-OAEP and RSA-PSS padding. It is a separate choice from the digest the signature or the cipher uses, it is frequently left at SHA-1 by default, and a static import of it - `import static java.security.spec.MGF1ParameterSpec.SHA512` - is the only place the choice appears in the file that makes it.

This picks the hash used inside RSA padding. It matters because the default is often SHA-1, which is broken today without any quantum computer.

What to do. The mask-generation digest travels with the RSA key it pads. When that key moves to ML-KEM or ML-DSA the padding goes with it; until then, SHA-256 or better.

  1. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:222 configurePssParameters(signature, MGF1ParameterSpec.SHA384, 48);
java.mgf1 · CWE-327
SHA-512 Quantum-safe 1 place See details

Mask-generation digest named for RSA padding

`MGF1ParameterSpec.SHA256` names the digest inside RSA-OAEP and RSA-PSS padding. It is a separate choice from the digest the signature or the cipher uses, it is frequently left at SHA-1 by default, and a static import of it - `import static java.security.spec.MGF1ParameterSpec.SHA512` - is the only place the choice appears in the file that makes it.

This picks the hash used inside RSA padding. It matters because the default is often SHA-1, which is broken today without any quantum computer.

What to do. The mask-generation digest travels with the RSA key it pads. When that key moves to ML-KEM or ML-DSA the padding goes with it; until then, SHA-256 or better.

  1. handler/src/main/java/io/netty/handler/ssl/JdkDelegatingPrivateKeyMethod.java:225 configurePssParameters(signature, MGF1ParameterSpec.SHA512, 64);
java.mgf1 · CWE-327

Cryptographic assets

Algorithm Assessment What it means Occurrences
unknown Could not be determined The algorithm could not be established from the source - chosen at runtime, or decided somewhere this scan does not reach. 195
ECDH Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 158
TLS Quantum-vulnerable Every TLS cipher suite in general use negotiates a classical key exchange, so a recorded session is decryptable once that exchange falls. 155
DH Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 105
RSA Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 52
RSAES-PKCS1v15 Already broken PKCS#1 v1.5 encryption padding is vulnerable to Bleichenbacher oracles today, and the underlying RSA is broken by Shor. 40
3DES Already broken Triple DES is withdrawn by NIST and limited by its 64-bit block, independent of quantum. 22
CSPRNG Quantum-safe A cryptographically secure random number generator provided by the platform. Not weakened by a quantum computer. 13
RC4 Already broken RC4 keystream biases break it classically; it is prohibited in TLS by RFC 7465. 11
SHA-256 Reduced margin Pre-image resistance falls to about 128 bits of quantum work. Adequate for most uses; SHA-384 restores the full margin where a signature must last decades. 11
NULL Already broken A NULL cipher provides no confidentiality at all: the session is authenticated and then sent in the clear. No quantum computer is needed to read it. 9
Ed25519 Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 9
EdDSA Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 5
AES Reduced margin Grover's algorithm halves the effective strength; the parameter, not the design, is the problem. The key size was not visible at this call site, so the weaker case is assumed. 4
DSA Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 4
EC Quantum-vulnerable An elliptic-curve key pair. The source does not say whether it signs or agrees a shared secret, and the curve alone cannot: the same curve serves both. 3
ECDSA Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 3
HMAC Quantum-safe A keyed MAC is not affected by Shor and only marginally by Grover. 2
SHA-1 Already broken SHAttered and subsequent work produced practical collisions; NIST withdrew SHA-1 in 2030 guidance and it is already unacceptable for signatures. 2
RSA-PSS Quantum-vulnerable Broken by Shor's algorithm on a cryptographically relevant quantum computer. 2
MD5 Already broken Practical chosen-prefix collisions exist; MD5 has no remaining security as a digest. 1
PBKDF2 Reduced margin Not broken by a quantum computer, but weak against modern GPU cracking at low iteration counts, which is a present-day concern. 1
SHA-384 Quantum-safe No known quantum algorithm changes the security margin. 1
SHA-512 Quantum-safe No known quantum algorithm changes the security margin. 1
ML-DSA-44 Quantum-safe No known quantum algorithm changes the security margin. 1
ML-DSA-65 Quantum-safe No known quantum algorithm changes the security margin. 1
ML-DSA-87 Quantum-safe No known quantum algorithm changes the security margin. 1

Imported cryptographic libraries

Library Files
javax.net.ssl the TLS client and server 149
org.bouncycastle BouncyCastle, whose low-level API bypasses the JCA algorithm strings. It has shipped ML-KEM and ML-DSA since 1.79 22
java.security the JCA 161