Home / Class/ JdkSslContext Class — netty Architecture

JdkSslContext Class — netty Architecture

Architecture documentation for the JdkSslContext class in JdkSslContext.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  3d4632d0_2f31_c47f_5ff2_913e505ddf39["JdkSslContext"]
  c1423531_50e1_4073_7612_9aad399b2c5d["JdkSslContext.java"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|defined in| c1423531_50e1_4073_7612_9aad399b2c5d
  c06a4c54_3aed_2107_6854_defd58ec014b["defaultProtocols()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| c06a4c54_3aed_2107_6854_defd58ec014b
  42e71854_5300_5427_a868_fea31fd76042["supportedCiphers()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 42e71854_5300_5427_a868_fea31fd76042
  0830e989_bd68_1162_3e91_ff3228f713a1["defaultCiphers()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 0830e989_bd68_1162_3e91_ff3228f713a1
  c21f09d3_9683_0c32_3b9e_2c877e618505["isTlsV13Supported()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| c21f09d3_9683_0c32_3b9e_2c877e618505
  72fd56fa_278f_1c21_43ff_0abc25ab65d4["JdkSslContext()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 72fd56fa_278f_1c21_43ff_0abc25ab65d4
  cb7f18a6_a51e_0e31_d75b_a4791221e7ef["SSLContext()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| cb7f18a6_a51e_0e31_d75b_a4791221e7ef
  0f5a2636_95aa_cef1_9c58_eea8cca1ec98["isClient()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 0f5a2636_95aa_cef1_9c58_eea8cca1ec98
  3e9e4202_bad7_e9f9_02f5_f8af2404899f["SSLSessionContext()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 3e9e4202_bad7_e9f9_02f5_f8af2404899f
  2ffe13b9_2193_e990_0a8e_db6459dd7f9a["cipherSuites()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 2ffe13b9_2193_e990_0a8e_db6459dd7f9a
  725a80ce_befc_1e85_c67b_e47f1920b3d9["SSLEngine()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 725a80ce_befc_1e85_c67b_e47f1920b3d9
  d20cac20_7586_c985_8c1b_5dd1b3574328["configureSSLParameters()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| d20cac20_7586_c985_8c1b_5dd1b3574328
  998c989d_ede9_bf92_f5e5_d6e2a56f73ad["JdkApplicationProtocolNegotiator()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| 998c989d_ede9_bf92_f5e5_d6e2a56f73ad
  a9ac4b01_c2aa_1963_cee8_0840b70acdcf["KeyManagerFactory()"]
  3d4632d0_2f31_c47f_5ff2_913e505ddf39 -->|method| a9ac4b01_c2aa_1963_cee8_0840b70acdcf

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java lines 60–537

public class JdkSslContext extends SslContext {

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(JdkSslContext.class);

    static final String PROTOCOL = "TLS";
    private static final String[] DEFAULT_PROTOCOLS;
    private static final List<String> DEFAULT_CIPHERS;
    private static final List<String> DEFAULT_CIPHERS_NON_TLSV13;
    private static final Set<String> SUPPORTED_CIPHERS;
    private static final Set<String> SUPPORTED_CIPHERS_NON_TLSV13;
    private static final Provider DEFAULT_PROVIDER;

    static {
        Defaults defaults = new Defaults();
        defaults.init();

        DEFAULT_PROVIDER = defaults.defaultProvider;
        DEFAULT_PROTOCOLS = defaults.defaultProtocols;
        SUPPORTED_CIPHERS = defaults.supportedCiphers;
        DEFAULT_CIPHERS = defaults.defaultCiphers;
        DEFAULT_CIPHERS_NON_TLSV13 = defaults.defaultCiphersNonTLSv13;
        SUPPORTED_CIPHERS_NON_TLSV13 = defaults.supportedCiphersNonTLSv13;

        if (logger.isDebugEnabled()) {
            logger.debug("Default protocols (JDK): {} ", Arrays.asList(DEFAULT_PROTOCOLS));
            logger.debug("Default cipher suites (JDK): {}", DEFAULT_CIPHERS);
        }
    }

    private static final class Defaults {
        String[] defaultProtocols;
        List<String> defaultCiphers;
        List<String> defaultCiphersNonTLSv13;
        Set<String> supportedCiphers;
        Set<String> supportedCiphersNonTLSv13;
        Provider defaultProvider;

        void init() {
            SSLContext context;
            try {
                context = SSLContext.getInstance(PROTOCOL);
                context.init(null, null, null);
            } catch (Exception e) {
                throw new Error("failed to initialize the default SSL context", e);
            }

            defaultProvider = context.getProvider();

            SSLEngine engine = context.createSSLEngine();
            defaultProtocols = defaultProtocols(context, engine);

            supportedCiphers = Collections.unmodifiableSet(supportedCiphers(engine));
            defaultCiphers = Collections.unmodifiableList(defaultCiphers(engine, supportedCiphers));

            List<String> ciphersNonTLSv13 = new ArrayList<String>(defaultCiphers);
            ciphersNonTLSv13.removeAll(Arrays.asList(SslUtils.DEFAULT_TLSV13_CIPHER_SUITES));
            defaultCiphersNonTLSv13 = Collections.unmodifiableList(ciphersNonTLSv13);

            Set<String> suppertedCiphersNonTLSv13 = new LinkedHashSet<String>(supportedCiphers);
            suppertedCiphersNonTLSv13.removeAll(Arrays.asList(SslUtils.DEFAULT_TLSV13_CIPHER_SUITES));
            supportedCiphersNonTLSv13 = Collections.unmodifiableSet(suppertedCiphersNonTLSv13);
        }
    }

    private static String[] defaultProtocols(SSLContext context, SSLEngine engine) {
        // Choose the sensible default list of protocols that respects JDK flags, eg. jdk.tls.client.protocols
        final String[] supportedProtocols = context.getDefaultSSLParameters().getProtocols();
        Set<String> supportedProtocolsSet = new HashSet<String>(supportedProtocols.length);
        Collections.addAll(supportedProtocolsSet, supportedProtocols);
        List<String> protocols = new ArrayList<String>();
        addIfSupported(
                supportedProtocolsSet, protocols,
                SslProtocols.TLS_v1_3, SslProtocols.TLS_v1_2,
                SslProtocols.TLS_v1_1, SslProtocols.TLS_v1);

        if (!protocols.isEmpty()) {
            return protocols.toArray(EmptyArrays.EMPTY_STRINGS);
        }
        return engine.getEnabledProtocols();
    }

Frequently Asked Questions

What is the JdkSslContext class?
JdkSslContext is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java.
Where is JdkSslContext defined?
JdkSslContext is defined in handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java at line 60.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free