SSLContextSpi (Java Platform SE 8 )
Keywords: javax.net.ssl.SSLContextSpi class
Date: 2026-08-19

compact1, compact2, compact3
javax.net.ssl

## Class SSLContextSpi

- java.lang.Object
- - javax.net.ssl.SSLContextSpi

-     public abstract class SSLContextSpi
      extends Object

  This class defines the Service Provider Interface (SPI) for the `SSLContext` class.

  All the abstract methods in this class must be implemented by each cryptographic service provider who wishes to supply the implementation of a particular SSL context.

  Since:
    1.4
  See Also:
    `SSLContext`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SSLContextSpi()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract SSLEngine` | `engineCreateSSLEngine()` Creates a new `SSLEngine` using this context.
    `protected abstract SSLEngine` | `engineCreateSSLEngine(String host, int port)` Creates a `SSLEngine` using this context.
    `protected abstract SSLSessionContext` | `engineGetClientSessionContext()` Returns a client `SSLSessionContext` object for this context.
    `protected SSLParameters` | `engineGetDefaultSSLParameters()` Returns a copy of the SSLParameters indicating the default settings for this SSL context.
    `protected abstract SSLSessionContext` | `engineGetServerSessionContext()` Returns a server `SSLSessionContext` object for this context.
    `protected abstract SSLServerSocketFactory` | `engineGetServerSocketFactory()` Returns a `ServerSocketFactory` object for this context.
    `protected abstract SSLSocketFactory` | `engineGetSocketFactory()` Returns a `SocketFactory` object for this context.
    `protected SSLParameters` | `engineGetSupportedSSLParameters()` Returns a copy of the SSLParameters indicating the maximum supported settings for this SSL context.
    `protected abstract void` | `engineInit(KeyManager[] km, TrustManager[] tm, SecureRandom sr)` Initializes this context.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SSLContextSpi

          public SSLContextSpi()

  - ### Method Detail

    - #### engineInit

          protected abstract void engineInit(KeyManager[] km,
                                             TrustManager[] tm,
                                             SecureRandom sr)
                                      throws KeyManagementException

      Initializes this context.
      Parameters:
        `km` - the sources of authentication keys
        `tm` - the sources of peer authentication trust decisions
        `sr` - the source of randomness
      Throws:
        `KeyManagementException` - if this operation fails
      See Also:
        `SSLContext.init(KeyManager [], TrustManager [], SecureRandom)`

    - #### engineGetSocketFactory

          protected abstract SSLSocketFactory engineGetSocketFactory()

      Returns a `SocketFactory` object for this context.
      Returns:
        the `SocketFactory` object
      Throws:
        `IllegalStateException` - if the SSLContextImpl requires initialization and the `engineInit()` has not been called
      See Also:
        `SSLContext.getSocketFactory()`

    - #### engineGetServerSocketFactory

          protected abstract SSLServerSocketFactory engineGetServerSocketFactory()

      Returns a `ServerSocketFactory` object for this context.
      Returns:
        the `ServerSocketFactory` object
      Throws:
        `IllegalStateException` - if the SSLContextImpl requires initialization and the `engineInit()` has not been called
      See Also:
        `SSLContext.getServerSocketFactory()`

    - #### engineCreateSSLEngine

          protected abstract SSLEngine engineCreateSSLEngine()

      Creates a new `SSLEngine` using this context.

      Applications using this factory method are providing no hints for an internal session reuse strategy. If hints are desired, `engineCreateSSLEngine(String, int)` should be used instead.

      Some cipher suites (such as Kerberos) require remote hostname information, in which case this factory method should not be used.

      Returns:
        the `SSLEngine` Object
      Throws:
        `IllegalStateException` - if the SSLContextImpl requires initialization and the `engineInit()` has not been called
      Since:
        1.5
      See Also:
        `SSLContext.createSSLEngine()`

    - #### engineCreateSSLEngine

          protected abstract SSLEngine engineCreateSSLEngine(String host,
                                                             int port)

      Creates a `SSLEngine` using this context.

      Applications using this factory method are providing hints for an internal session reuse strategy.

      Some cipher suites (such as Kerberos) require remote hostname information, in which case peerHost needs to be specified.

      Parameters:
        `host` - the non-authoritative name of the host
        `port` - the non-authoritative port
      Returns:
        the `SSLEngine` Object
      Throws:
        `IllegalStateException` - if the SSLContextImpl requires initialization and the `engineInit()` has not been called
      Since:
        1.5
      See Also:
        `SSLContext.createSSLEngine(String, int)`

    - #### engineGetServerSessionContext

          protected abstract SSLSessionContext engineGetServerSessionContext()

      Returns a server `SSLSessionContext` object for this context.
      Returns:
        the `SSLSessionContext` object
      See Also:
        `SSLContext.getServerSessionContext()`

    - #### engineGetClientSessionContext

          protected abstract SSLSessionContext engineGetClientSessionContext()

      Returns a client `SSLSessionContext` object for this context.
      Returns:
        the `SSLSessionContext` object
      See Also:
        `SSLContext.getClientSessionContext()`

    - #### engineGetDefaultSSLParameters

          protected SSLParameters engineGetDefaultSSLParameters()

      Returns a copy of the SSLParameters indicating the default settings for this SSL context.

      The parameters will always have the ciphersuite and protocols arrays set to non-null values.

      The default implementation obtains the parameters from an SSLSocket created by calling the SocketFactory.createSocket() method of this context's SocketFactory.

      Returns:
        a copy of the SSLParameters object with the default settings
      Throws:
        `UnsupportedOperationException` - if the default SSL parameters could not be obtained.
      Since:
        1.6

    - #### engineGetSupportedSSLParameters

          protected SSLParameters engineGetSupportedSSLParameters()

      Returns a copy of the SSLParameters indicating the maximum supported settings for this SSL context.

      The parameters will always have the ciphersuite and protocols arrays set to non-null values.

      The default implementation obtains the parameters from an SSLSocket created by calling the SocketFactory.createSocket() method of this context's SocketFactory.

      Returns:
        a copy of the SSLParameters object with the maximum supported settings
      Throws:
        `UnsupportedOperationException` - if the supported SSL parameters could not be obtained.
      Since:
        1.6

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.