Class TcpNioSSLConnection

All Implemented Interfaces:
Runnable, TcpConnection

public class TcpNioSSLConnection extends TcpNioConnection
Implementation of TcpConnection supporting SSL/TLS over NIO. Unlike TcpNetConnection, which uses Sockets, the JVM does not directly support SSL for SocketChannels, used by NIO. Instead, the SSLEngine is provided whereby the SSL encryption is performed by passing in a plain text buffer, and receiving an encrypted buffer to transmit over the network. Similarly, encrypted data read from the network is decrypted.

However, before this can be done, certain handshaking operations are required, involving the creation of data buffers which must be exchanged by the peers. A number of such transfers are required; once the handshake is finished, it is relatively simple to encrypt/decrypt the data.

Also, it may be deemed necessary to re-perform handshaking.

This class supports the management of handshaking as necessary, both from the initiating and receiving peers.

Since:
2.2
Author:
Gary Russell, Artem Bilan, Christian Tzolov
  • Constructor Details

  • Method Details

    • setHandshakeTimeout

      public void setHandshakeTimeout(int handshakeTimeout)
      Set the timeout while waiting for handshake data (in seconds). Default 30.
      Parameters:
      handshakeTimeout - the timeout.
      Since:
      4.3.6
    • getSslSession

      public SSLSession getSslSession()
      Specified by:
      getSslSession in interface TcpConnection
      Overrides:
      getSslSession in class TcpNioConnection
      Returns:
      the SSLSession associated with this connection, if SSL is in use, null otherwise.
    • sendToPipe

      protected void sendToPipe(ByteBuffer networkBuffer) throws IOException
      Overrides super class method to perform decryption and/or participate in handshaking. Decrypted data is sent to the super class to be assembled into a Message. Data received from the network may constitute multiple SSL packets, and may end with a partial packet. In that case, the buffer is compacted, ready to receive the remainder of the packet.
      Overrides:
      sendToPipe in class TcpNioConnection
      Throws:
      IOException
    • init

      public void init()
      Initializes the SSLEngine and sets up the encryption/decryption buffers.
    • getChannelOutputStream

      protected org.springframework.integration.ip.tcp.connection.TcpNioConnection.ChannelOutputStream getChannelOutputStream()
      Overrides:
      getChannelOutputStream in class TcpNioConnection
    • getSSLChannelOutputStream

      protected org.springframework.integration.ip.tcp.connection.TcpNioSSLConnection.SSLChannelOutputStream getSSLChannelOutputStream()
    • close

      public void close()
      Description copied from class: TcpConnectionSupport
      Close this connection.
      Specified by:
      close in interface TcpConnection
      Overrides:
      close in class TcpNioConnection