Home / Class/ ReferenceCountedOpenSslClientContext Class — netty Architecture

ReferenceCountedOpenSslClientContext Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  83d6329d_6707_0ba7_b929_d52e1cc5dcf0["ReferenceCountedOpenSslClientContext"]
  f8d0d0ad_c92a_c95d_60dc_9e28ea2de269["ReferenceCountedOpenSslClientContext.java"]
  83d6329d_6707_0ba7_b929_d52e1cc5dcf0 -->|defined in| f8d0d0ad_c92a_c95d_60dc_9e28ea2de269
  54f7736a_adfd_654c_b011_9beb1ef5362e["ReferenceCountedOpenSslClientContext()"]
  83d6329d_6707_0ba7_b929_d52e1cc5dcf0 -->|method| 54f7736a_adfd_654c_b011_9beb1ef5362e
  3ade9400_a85f_1392_29c8_dd4562bef618["OpenSslSessionContext()"]
  83d6329d_6707_0ba7_b929_d52e1cc5dcf0 -->|method| 3ade9400_a85f_1392_29c8_dd4562bef618
  a68e950c_c9f8_4196_ac2e_bfaf6daff7c0["setVerifyCallback()"]
  83d6329d_6707_0ba7_b929_d52e1cc5dcf0 -->|method| a68e950c_c9f8_4196_ac2e_bfaf6daff7c0

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslClientContext.java lines 46–328

public final class ReferenceCountedOpenSslClientContext extends ReferenceCountedOpenSslContext {

    private static final String[] SUPPORTED_KEY_TYPES = {
            OpenSslKeyMaterialManager.KEY_TYPE_RSA,
            OpenSslKeyMaterialManager.KEY_TYPE_DH_RSA,
            OpenSslKeyMaterialManager.KEY_TYPE_EC,
            OpenSslKeyMaterialManager.KEY_TYPE_EC_RSA,
            OpenSslKeyMaterialManager.KEY_TYPE_EC_EC
    };

    private final OpenSslSessionContext sessionContext;

    ReferenceCountedOpenSslClientContext(X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
                                         X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
                                         KeyManagerFactory keyManagerFactory, Iterable<String> ciphers,
                                         CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn,
                                         String[] protocols, long sessionCacheSize, long sessionTimeout,
                                         boolean enableOcsp, String keyStore, String endpointIdentificationAlgorithm,
                                         List<SNIServerName> serverNames, ResumptionController resumptionController,
                                         Map.Entry<SslContextOption<?>, Object>... options) throws SSLException {
        super(ciphers, cipherFilter, toNegotiator(apn), SSL.SSL_MODE_CLIENT, keyCertChain,
              ClientAuth.NONE, protocols, false, endpointIdentificationAlgorithm, enableOcsp, true,
                serverNames, resumptionController, options);
        boolean success = false;
        try {
            sessionContext = newSessionContext(this, ctx, engines, trustCertCollection, trustManagerFactory,
                                               keyCertChain, key, keyPassword, keyManagerFactory, keyStore,
                                               sessionCacheSize, sessionTimeout, resumptionController,
                                               isJdkSignatureFallbackEnabled(options));
            success = true;
        } finally {
            if (!success) {
                release();
            }
        }
    }

    @Override
    public OpenSslSessionContext sessionContext() {
        return sessionContext;
    }

    static OpenSslSessionContext newSessionContext(ReferenceCountedOpenSslContext thiz, long ctx,
                                                   Map<Long, ReferenceCountedOpenSslEngine> engines,
                                                   X509Certificate[] trustCertCollection,
                                                   TrustManagerFactory trustManagerFactory,
                                                   X509Certificate[] keyCertChain, PrivateKey key,
                                                   String keyPassword, KeyManagerFactory keyManagerFactory,
                                                   String keyStore, long sessionCacheSize, long sessionTimeout,
                                                   ResumptionController resumptionController,
                                                   boolean fallbackToJdkProviders)
            throws SSLException {
        if (key == null && keyCertChain != null || key != null && keyCertChain == null) {
            throw new IllegalArgumentException(
                    "Either both keyCertChain and key needs to be null or none of them");
        }
        OpenSslKeyMaterialProvider keyMaterialProvider = null;
        try {
            try {
                // Check if we have an alternative key that requires special handling
                // Only detect alternative keys when we have an actual key object that can't be accessed directly
                if (keyManagerFactory == null && key != null && key.getEncoded() == null) {
                    if (!fallbackToJdkProviders) {
                        throw new SSLException("Private key requiring alternative signature provider detected " +
                                "(such as hardware security key, smart card, or remote signing service) but " +
                                "alternative key fallback is disabled.");
                    }
                    keyMaterialProvider = setupSecurityProviderSignatureSource(thiz, ctx, keyCertChain, key,
                            materialManager -> new OpenSslClientCertificateCallback(
                                    engines, materialManager));
                } else if (!OpenSsl.useKeyManagerFactory()) {
                    if (keyManagerFactory != null) {
                        throw new IllegalArgumentException(
                                "KeyManagerFactory not supported");
                    }
                    if (keyCertChain != null/* && key != null*/) {
                        setKeyMaterial(ctx, keyCertChain, key, keyPassword);
                    }
                } else {
                    // javadocs state that keyManagerFactory has precedent over keyCertChain
                    if (keyManagerFactory == null && keyCertChain != null) {

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free