Класс SSLSocket

Все реализованные интерфейсы:
Closeable, AutoCloseable
public abstract class SSLSocket
extends Socket

Этот класс расширяет Socket и предоставляет защищённые сокеты, используя такие протоколы, как «Secure Sockets Layer» (SSL) или протоколы IETF «Transport Layer Security» (TLS).

Такие сокеты являются обычными потоковыми сокетами, но они добавляют слой защитных мер поверх базового сетевого транспортного протокола, такого как TCP. К этим мерам защиты относятся:

  • Защита целостности. SSL защищает от изменения сообщений активным перехватом данных.
  • Аутентификация. В большинстве режимов SSL обеспечивает аутентификацию участников. Серверы обычно аутентифицируются, а клиенты могут быть аутентифицированы по запросу серверов.
  • Конфиденциальность (защита приватности). В большинстве режимов SSL шифрует данные, передаваемые между клиентом и сервером. Это защищает конфиденциальность данных, чтобы пассивные перехватывающие данные не видели конфиденциальную информацию, такую как финансовая информация или личная информация различных видов.

Эти виды защиты определяются «набором шифров», который представляет собой комбинацию криптографических алгоритмов, используемых заданным SSL-соединением. Во время процесса согласования два конечных узла должны договориться о наборе шифров, который доступен в обеих средах. Если такого набора шифров нет, то SSL-соединение не может быть установлено, и данные не могут быть обменяны.

Использованный набор шифров устанавливается посредством процесса согласования, называемого «рукопожатием». Цель этого процесса — создать или возобновить «сессию», которая может защищать множество соединений со временем. После завершения рукопожатия вы можете получить доступ к атрибутам сессии, используя метод getSession. Инициативное рукопожатие для этого соединения может быть инициировано одним из трёх способов:

  • вызовом startHandshake, который явно инициирует рукопожатие, или
  • любая попытка чтения или записи данных приложения в этом сокете вызывает неявное рукопожатие, или
  • вызов getSession пытается установить сессию, если нет текущей действительной сессии, и выполняется неявное рукопожатие.

Если рукопожатие завершится неудачно по какой-либо причине, SSLSocket закрывается, и дальнейшая коммуникация невозможна.

Существует две группы наборов шифров, о которых вам необходимо знать при управлении наборами шифров:

  • Поддерживаемые наборы шифров: все наборы шифров, которые поддерживаются реализацией SSL. Этот список сообщается с помощью getSupportedCipherSuites.
  • Включенные наборы шифров, которые могут быть меньше полного набора поддерживаемых наборов. Эта группа устанавливается с помощью метода setEnabledCipherSuites и запрашивается с помощью метода getEnabledCipherSuites. Изначально на новом сокете будет включен набор по умолчанию, представляющий собой минимальную рекомендуемую конфигурацию.

По умолчанию реализация требует, чтобы только наборы шифров, которые аутентифицируют серверы и обеспечивают конфиденциальность, были включены по умолчанию. Только если обе стороны явно согласятся на неаутентифицированную и/или неконфиденциальную (незашифрованную) коммуникацию, будет выбран такой набор шифров.

Когда SSLSocket создаётся впервые, рукопожатие не выполняется, чтобы приложения могли сначала установить свои предпочтения в отношении коммуникации: какие наборы шифров использовать, должен ли сокет быть в режиме клиента или сервера и т.д. Однако безопасность всегда предоставляется к моменту отправки данных приложения по подключению.

Вы можете зарегистрироваться для получения уведомлений об уведомлениях о завершении рукопожатия. Это включает в себя использование двух дополнительных классов. Объекты HandshakeCompletedEvent передаются экземплярам HandshakeCompletedListener, которые регистрируются пользователями этого API. SSLSocket создаётся по SSLSocketFactory, или посредством accept соединения из SSLServerSocket.

SSL-сокет должен выбрать режим работы: клиент или сервер. Это определит, кто начнёт процесс рукопожатия, а также какие сообщения должны быть отправлены каждой стороной. Каждое соединение должно иметь одного клиента и одного сервера, иначе рукопожатие не будет выполняться должным образом. После начала начального рукопожатия сокет не может переключаться между режимами клиента и сервера, даже при переподключении.

Примечание API:
При завершении использования подключения, клиентские и серверные приложения должны закрыть обе стороны своего подключения. Для объектов SSLSocket, например, приложение может вызвать Socket.shutdownOutput() или OutputStream.close() для закрытия потока вывода и вызвать Socket.shutdownInput() или InputStream.close() для закрытия потока ввода. Обратите внимание, что в некоторых случаях закрытие входного потока может зависеть от закрытия выходного потока со стороны партнера. Если подключение не закрыто надлежащим образом (например, Socket.shutdownInput() вызван до получения уведомления о закрытии записи партнером), могут быть выброшены исключения, указывающие на ошибку. После закрытия SSLSocket, оно не может быть повторно использовано: необходимо создать новый SSLSocket.
С тех пор:
1.4
См. также:
Socket, SSLServerSocket, SSLSocketFactory

Краткое описание конструкторов

Модификатор Конструктор Описание
protected SSLSocket()

Используется только подклассами.

protected SSLSocket​(String host, int port)

Используется только подклассами.

protected SSLSocket​(String host, int port, InetAddress clientAddress, int clientPort)

Используется только подклассами.

protected SSLSocket​(InetAddress address, int port)

Используется только подклассами.

protected SSLSocket​(InetAddress address, int port, InetAddress clientAddress, int clientPort)

Используется только подклассами.

Методы

Модификатор и тип Метод Описание
abstract void addHandshakeCompletedListener​(HandshakeCompletedListener listener)

Регистрирует обработчик событий для получения уведомлений о завершении рукопожатия SSL на этом соединении.

String getApplicationProtocol()

Возвращает последнее значение протокола приложения, согласованное для этого соединения.

abstract String[] getEnabledCipherSuites()

Возвращает имена наборов шифров SSL, которые в настоящее время разрешены для использования на этом соединении.

abstract String[] getEnabledProtocols()

Возвращает имена версий протоколов, которые в настоящее время разрешены для использования на этом соединении.

abstract boolean getEnableSessionCreation()

Возвращает true, если новые сессии SSL могут быть установлены этим сокетом.

String getHandshakeApplicationProtocol()

Возвращает значение протокола приложения, согласованное при текущем рукопожатии SSL/TLS.

BiFunction<SSLSocket,​List<String>,​String> getHandshakeApplicationProtocolSelector()

Возвращает функцию обратного вызова, которая выбирает значение протокола приложения во время рукопожатия SSL/TLS/DTLS.

SSLSession getHandshakeSession()

Возвращает SSLSession, которое строится во время рукопожатия SSL/TLS.

abstract boolean getNeedClientAuth()

Возвращает true, если сокет будет требовать аутентификацию клиента.

abstract SSLSession getSession()

Возвращает сессию SSL, используемую этим соединением.

SSLParameters getSSLParameters()

Возвращает SSLParameters, действующие для этого SSLSocket.

abstract String[] getSupportedCipherSuites()

Возвращает имена наборов шифров, которые можно было бы разрешить для использования на этом соединении.

abstract String[] getSupportedProtocols()

Возвращает имена протоколов, которые можно было бы разрешить для использования на соединении SSL.

abstract boolean getUseClientMode()

Возвращает true, если сокет настроен на использование клиентского режима во время рукопожатия.

abstract boolean getWantClientAuth()

Возвращает true, если сокет будет запрашивать аутентификацию клиента.

abstract void removeHandshakeCompletedListener​(HandshakeCompletedListener listener)

Удаляет ранее зарегистрированного обработчика завершения рукопожатия.

abstract void setEnabledCipherSuites​(String[] suites)

Устанавливает наборы шифров, разрешенные для использования на этом соединении.

abstract void setEnabledProtocols​(String[] protocols)

Устанавливает версии протоколов, разрешенные для использования на этом соединении.

abstract void setEnableSessionCreation​(boolean flag)

Управляет возможностью установки новых сессий SSL этим сокетом.

void setHandshakeApplicationProtocolSelector​(BiFunction<SSLSocket,​List<String>,​String> selector)

Регистрирует функцию обратного вызова, которая выбирает значение протокола приложения для рукопожатия SSL/TLS/DTLS.

abstract void setNeedClientAuth​(boolean need)

Настраивает сокет для требования аутентификации клиента.

void setSSLParameters​(SSLParameters params)

Применяет SSLParameters к этому сокету.

abstract void setUseClientMode​(boolean mode)

Настраивает сокет на использование клиентского (или серверного) режима во время рукопожатия.

abstract void setWantClientAuth​(boolean want)

Настраивает сокет для запроса аутентификации клиента.

abstract void startHandshake()

Инициирует рукопожатие SSL на этом соединении.

Методы, объявленные в классе java.net.Socket

bind, close, connect, connect, getChannel, getInetAddress, getInputStream, getKeepAlive, getLocalAddress, getLocalPort, getLocalSocketAddress, getOOBInline, getOption, getOutputStream, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoLinger, getSoTimeout, getTcpNoDelay, getTrafficClass, isBound, isClosed, isConnected, isInputShutdown, isOutputShutdown, sendUrgentData, setKeepAlive, setOOBInline, setOption, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSocketImplFactory, setSoLinger, setSoTimeout, setTcpNoDelay, setTrafficClass, shutdownInput, shutdownOutput, supportedOptions, toString

Методы, объявленные в классе java.lang.Object

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

Конструкторы

SSLSocket

protected SSLSocket()

Используется только подклассами. Создаёт неинициализированный, неподключённый TCP-сокет.

SSLSocket

protected SSLSocket(String host,
                    int port)
             throws IOException,
                    UnknownHostException

Используется только подклассами. Создаёт TCP-соединение с указанным хостом на указанном порту. Действует как SSL-клиент.

Если существует менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к SecurityException.

Параметры:
host - имя хоста для подключения или null для адресной петли.
port - номер порта сервера
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkConnect не разрешает операцию.
UnknownHostException - если хост неизвестен
IllegalArgumentException - если параметр порта находится вне указанного диапазона допустимых значений портов, который находится в диапазоне от 0 до 65535 включительно.
См. также:
SecurityManager.checkConnect(java.lang.String, int)

SSLSocket

protected SSLSocket(InetAddress address,
                    int port)
             throws IOException

Используется только подклассами. Создаёт TCP-соединение с сервером по указанному адресу и порту. Действует как SSL-клиент.

Если существует менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к SecurityException.

Параметры:
address - хост сервера
port - его порт
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне указанного диапазона допустимых значений портов, который находится в диапазоне от 0 до 65535 включительно.
NullPointerException - если address равно null.
См. также:
SecurityManager.checkConnect(java.lang.String, int)

SSLSocket

protected SSLSocket(String host,
                    int port,
                    InetAddress clientAddress,
                    int clientPort)
             throws IOException,
                    UnknownHostException

Используется только подклассами. Создаёт SSL-соединение с указанным хостом на указанном порту, привязывая клиентскую сторону соединения к заданному адресу и порту. Действует как SSL-клиент.

Если существует менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к SecurityException.

Параметры:
host - имя хоста для подключения или null для адресной петли.
port - номер порта сервера
clientAddress - адрес клиента, к которому привязан сокет, или null для anyLocal адреса.
clientPort - порт клиента, к которому привязан сокет, или zero для выбора свободного порта системой.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkConnect не разрешает операцию.
UnknownHostException - если хост неизвестен
IllegalArgumentException - если параметр порта или clientPort находится вне указанного диапазона допустимых значений портов, который находится в диапазоне от 0 до 65535 включительно.
См. также:
SecurityManager.checkConnect(java.lang.String, int)

SSLSocket

protected SSLSocket(InetAddress address,
                    int port,
                    InetAddress clientAddress,
                    int clientPort)
             throws IOException

Используется только подклассами. Создаёт SSL-соединение с сервером по указанному адресу и TCP-порту, привязывая клиентскую сторону соединения к заданному адресу и порту. Действует как SSL-клиент.

Если существует менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к SecurityException.

Параметры:
address - хост сервера
port - его порт
clientAddress - адрес клиента, к которому привязан сокет, или null для anyLocal адреса.
clientPort - порт клиента, к которому привязан сокет, или zero для выбора свободного порта системой.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
SecurityException - если существует менеджер безопасности и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр port или clientPort находится за пределами допустимого диапазона значений порта, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.
См. также:
SecurityManager.checkConnect(java.lang.String, int)

Методы

getSupportedCipherSuites

public abstract String[] getSupportedCipherSuites()

Возвращает имена наборов шифров, которые могут быть включены для использования в этом соединении. Обычно только подмножество из них фактически будет включено по умолчанию, поскольку этот список может содержать наборы шифров, которые не соответствуют требованиям качества обслуживания для этих значений по умолчанию. Такие наборы шифров могут быть полезны в специализированных приложениях.

Возвращаемый массив включает наборы шифров из списка стандартных имён наборов шифров в разделе Названия наборов шифров JSSE документации по стандартным именам алгоритмов архитектуры Java Cryptography, а также может включать и другие наборы шифров, поддерживаемые поставщиком.

Возвращает:
массив имён наборов шифров
См. также:
getEnabledCipherSuites(), setEnabledCipherSuites(String [])

getEnabledCipherSuites

public abstract String[] getEnabledCipherSuites()

Возвращает имена наборов шифров SSL, которые в настоящее время включены для использования в этом соединении. Когда SSLSocket создаётся впервые, все включённые наборы шифров поддерживают минимальное качество обслуживания. Таким образом, в некоторых средах это значение может быть пустым.

Обратите внимание, что даже если набор шифров включён, он может никогда не использоваться. Это может произойти, если партнёр его не поддерживает, или его использование ограничено, или необходимые сертификаты (и закрытые ключи) для набора шифров недоступны, или анонимный набор включён, но требуется аутентификация.

Возвращаемый массив включает наборы шифров из списка стандартных имён наборов шифров в разделе Названия наборов шифров JSSE документации по стандартным именам алгоритмов архитектуры Java Cryptography, а также может включать и другие наборы шифров, поддерживаемые поставщиком.

Возвращает:
массив имён наборов шифров
См. также:
getSupportedCipherSuites(), setEnabledCipherSuites(String [])

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String[] suites)

Устанавливает наборы шифров, включённые для использования в этом соединении.

Каждый набор шифров в параметре suites должен был быть перечислен методом getSupportedCipherSuites(), иначе метод завершится ошибкой. После успешного вызова этого метода для использования включены только наборы шифров, перечисленные в параметре suites.

Обратите внимание, что стандартный список имён наборов шифров можно найти в разделе Названия наборов шифров JSSE документации по стандартным именам алгоритмов архитектуры Java Cryptography. Поставщики могут поддерживать имена наборов шифров, отсутствующие в этом списке, или могут не использовать рекомендуемое имя для определённого набора шифров.

См. getEnabledCipherSuites() для получения дополнительной информации о том, почему конкретный набор шифров может никогда не использоваться в соединении.

Параметры:
suites - Имена всех наборов шифров, которые нужно включить
Исключения:
IllegalArgumentException - когда один или несколько шифров, указанных в параметре, не поддерживаются или когда параметр равен null.
См. также:
getSupportedCipherSuites(), getEnabledCipherSuites()

getSupportedProtocols

public abstract String[] getSupportedProtocols()

Возвращает имена протоколов, которые могут быть включены для использования в соединении SSL.

Возвращает:
массив поддерживаемых протоколов

getEnabledProtocols

public abstract String[] getEnabledProtocols()

Возвращает имена версий протоколов, которые в настоящее время включены для использования в этом соединении.

Обратите внимание, что даже если протокол включён, он может никогда не использоваться. Это может произойти, если партнёр не поддерживает протокол, или его использование ограничено, или нет включённых наборов шифров, поддерживаемых протоколом.

Возвращает:
массив протоколов
См. также:
setEnabledProtocols(String [])

setEnabledProtocols

public abstract void setEnabledProtocols(String[] protocols)

Устанавливает версии протоколов, включённые для использования в этом соединении.

Протоколы должны быть перечислены методом getSupportedProtocols() как поддерживаемые. После успешного вызова этого метода для использования включены только протоколы, перечисленные в параметре protocols.

Параметры:
protocols - Имена всех протоколов, которые нужно включить.
Исключения:
IllegalArgumentException - если один или несколько протоколов, указанных в параметре, не поддерживаются, или если параметр протоколов равен null.
См. также:
getEnabledProtocols()

getSession

public abstract SSLSession getSession()

Возвращает SSL-сессию, используемую этим соединением. Эти сессии могут быть долгоживущими и часто соответствуют всей сессии входа в систему для определенного пользователя. Сессия определяет конкретный набор шифров, активно используемый всеми соединениями в этой сессии, а также идентификаторы клиента и сервера сессии.

Этот метод инициирует начальное рукопожатие при необходимости и затем блокируется до тех пор, пока рукопожатие не будет установлено.

Если при начальном рукопожатии возникнет ошибка, этот метод возвращает недопустимый объект сессии, который сообщает о недопустимом наборе шифров "SSL_NULL_WITH_NULL_NULL".

Возвращает:
the SSLSession

getHandshakeSession

public SSLSession getHandshakeSession()

Возвращает SSLSession, формируемый во время SSL/TLS-рукопожатия.

Протоколы TLS могут договариваться о параметрах, необходимых при использовании экземпляра этого класса, но перед тем, как SSLSession будет полностью инициализирован и доступен через getSession. Например, список допустимых алгоритмов подписи может ограничить тип сертификатов, которые могут быть использованы при принятии решений TrustManager, или максимальные размеры пакетов фрагментов TLS могут быть изменены для лучшей поддержки сетевой среды.

Этот метод предоставляет ранний доступ к формируемому SSLSession. В зависимости от того, как далеко продвинулось рукопожатие, некоторые данные могут еще не быть доступны для использования. Например, если удаленный сервер будет отправлять цепочку сертификатов, но эта цепочка еще не обработана, метод getPeerCertificates класса SSLSession выбросит исключение SSLPeerUnverifiedException. После обработки этой цепочки getPeerCertificates вернёт правильное значение.

В отличие от getSession(), этот метод не инициирует начальное рукопожатие и не блокируется до завершения рукопожатия.

Возвращает:
null, если этот экземпляр не находится в процессе рукопожатия или текущее рукопожатие не продвинулось достаточно, чтобы создать базовый SSLSession. В противном случае этот метод возвращает SSLSession, который в данный момент переговаривается.
Выбрасывает:
UnsupportedOperationException - если базовая реализация не поддерживает операцию.
С:
1.7
См. также:
SSLEngine, SSLSession, ExtendedSSLSession, X509ExtendedKeyManager, X509ExtendedTrustManager

addHandshakeCompletedListener

public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)

Регистрирует обработчик событий для получения уведомлений о завершении SSL-рукопожатия в этом соединении.

Параметры:
listener - обработчик событий завершения рукопожатия
Выбрасывает:
IllegalArgumentException - если аргумент равен null.
См. также:
startHandshake(), removeHandshakeCompletedListener(HandshakeCompletedListener)

removeHandshakeCompletedListener

public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)

Удаляет ранее зарегистрированного обработчика завершения рукопожатия.

Параметры:
listener - обработчик событий завершения рукопожатия
Выбрасывает:
IllegalArgumentException - если обработчик не зарегистрирован или аргумент равен null.
См. также:
addHandshakeCompletedListener(HandshakeCompletedListener)

startHandshake

public abstract void startHandshake()
                             throws IOException

Инициирует SSL-рукопожатие в этом соединении. Общие причины включают необходимость использования новых ключей шифрования, изменения набора шифров или инициации новой сессии. Чтобы принудительно выполнить полную повторную аутентификацию, текущая сессия может быть аннулирована перед запуском этого рукопожатия.

Если данные уже были отправлены по соединению, они продолжают передаваться во время этого рукопожатия. Когда рукопожатие завершается, об этом сигнализируется событием. Этот метод является синхронным для начального рукопожатия в соединении и возвращает значение, когда переговорённое рукопожатие завершено. Некоторые протоколы могут не поддерживать несколько рукопожатий в существующем сокете и могут выбросить исключение IOException.

Выбрасывает:
IOException - при сетевой ошибке
См. также:
addHandshakeCompletedListener(HandshakeCompletedListener)

setUseClientMode

public abstract void setUseClientMode(boolean mode)

Настраивает сокет для использования клиентского (или серверного) режима при рукопожатии.

Этот метод должен быть вызван перед началом любого рукопожатия. После начала рукопожатия режим не может быть изменен на протяжении всего жизненного цикла этого сокета.

Серверы обычно выполняют самоаутентификацию, а клиенты не обязаны этого делать.

Параметры:
mode - true, если сокет должен начать рукопожатие в режиме "клиент"
Выбрасывает:
IllegalArgumentException - если попытка изменения режима выполняется после начала начального рукопожатия.
См. также:
getUseClientMode()

getUseClientMode

public abstract boolean getUseClientMode()

Возвращает true, если сокет настроен на использование клиентского режима при установке соединения.

Возвращает:
true, если сокет должен устанавливать соединение в режиме "клиент"
См. также:
setUseClientMode(boolean)

setNeedClientAuth

public abstract void setNeedClientAuth(boolean need)

Настраивает сокет на требование аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.

Настройка аутентификации клиента сокета может быть одной из следующих:

  • требуется аутентификация клиента
  • запрашивается аутентификация клиента
  • аутентификация клиента не требуется

В отличие от setWantClientAuth(boolean), если этот параметр установлен, а клиент отказывается предоставить информацию об аутентификации, переговоры прекратятся, и соединение будет разорвано.

Вызов этого метода перезаписывает любые предыдущие настройки, сделанные этим методом или setWantClientAuth(boolean).

Параметры:
need - устанавливается в true, если требуется аутентификация клиента, или в false, если аутентификация клиента не требуется.
См. также:
getNeedClientAuth(), setWantClientAuth(boolean), getWantClientAuth(), setUseClientMode(boolean)

getNeedClientAuth

public abstract boolean getNeedClientAuth()

Возвращает true, если сокет будет требовать аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.

Возвращает:
true, если требуется аутентификация клиента, или false, если она не требуется.
См. также:
setNeedClientAuth(boolean), setWantClientAuth(boolean), getWantClientAuth(), setUseClientMode(boolean)

setWantClientAuth

public abstract void setWantClientAuth(boolean want)

Настраивает сокет на запрос аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.

Настройка аутентификации клиента сокета может быть одной из следующих:

  • требуется аутентификация клиента
  • запрашивается аутентификация клиента
  • аутентификация клиента не требуется

В отличие от setNeedClientAuth(boolean), если этот параметр установлен, а клиент отказывается предоставить информацию об аутентификации, переговоры продолжатся.

Вызов этого метода перезаписывает любые предыдущие настройки, сделанные этим методом или setNeedClientAuth(boolean).

Параметры:
want - устанавливается в true, если запрашивается аутентификация клиента, или в false, если она не требуется.
См. также:
getWantClientAuth(), setNeedClientAuth(boolean), getNeedClientAuth(), setUseClientMode(boolean)

getWantClientAuth

public abstract boolean getWantClientAuth()

Возвращает true, если сокет будет запрашивать аутентификацию клиента. Этот параметр полезен только для сокетов в серверном режиме.

Возвращает:
true, если запрашивается аутентификация клиента, или false, если она не требуется.
См. также:
setNeedClientAuth(boolean), getNeedClientAuth(), setWantClientAuth(boolean), setUseClientMode(boolean)

setEnableSessionCreation

public abstract void setEnableSessionCreation(boolean flag)

Управляет возможностью создания новых сессий SSL этим сокетом. Если создание сессий запрещено, а возобновить существующие сессии невозможно, установка соединения не удастся.

Параметры:
flag - true означает, что сессии могут быть созданы; это значение по умолчанию. false означает, что должна быть возобновлена существующая сессия
См. также:
getEnableSessionCreation()

getEnableSessionCreation

public abstract boolean getEnableSessionCreation()

Возвращает true, если этим сокетом могут быть созданы новые сессии SSL.

Возвращает:
true означает, что сессии могут быть созданы; это значение по умолчанию. false означает, что должна быть возобновлена существующая сессия
См. также:
setEnableSessionCreation(boolean)

getSSLParameters

public SSLParameters getSSLParameters()

Возвращает SSLParameters, действующие для данного SSLSocket. Цифры и протоколы возвращаемых SSLParameters всегда не равны null.

Возвращает:
действующие SSLParameters для данного SSLSocket.
С:
1.6

setSSLParameters

public void setSSLParameters(SSLParameters params)

Применяет SSLParameters к этому сокету.

Это означает:

  • Если params.getCipherSuites() не null, setEnabledCipherSuites() вызывается с этим значением.
  • Если params.getProtocols() не null, setEnabledProtocols() вызывается с этим значением.
  • Если params.getNeedClientAuth() или params.getWantClientAuth() возвращают true, setNeedClientAuth(true) и setWantClientAuth(true) вызываются соответственно; в противном случае вызывается setWantClientAuth(false).
  • Если params.getServerNames() не null, сокет настроит свои имена сервера с этим значением.
  • Если params.getSNIMatchers() не null, сокет настроит свои соответствия SNI с этим значением.
Параметры:
params - параметры
Исключения:
IllegalArgumentException - если вызов setEnabledCipherSuites() или setEnabledProtocols() завершится неудачно
С:
1.6

getApplicationProtocol

public String getApplicationProtocol()

Возвращает последнее значение протокола приложения, согласованное для этого соединения.

Если это поддерживается базовой реализацией SSL/TLS/DTLS, механизмы согласования имени приложения, такие как RFC 7301 , протокол согласования протоколов прикладного уровня (ALPN), могут согласовывать значения на уровне приложения между узлами.

Требования к реализации:
Реализация в этом классе выбрасывает UnsupportedOperationException и не выполняет никаких других действий.
Возвращает:
null, если ещё не определено, могут ли использоваться протоколы приложений для этого соединения, пустой String, если значения протоколов приложения не будут использоваться, или непустой протокол приложения String, если значение было успешно согласовано.
Исключения:
UnsupportedOperationException - если базовый поставщик не реализует операцию.
С:
9

getHandshakeApplicationProtocol

public String getHandshakeApplicationProtocol()

Возвращает значение протокола приложения, согласованное во время текущего процесса рукопожатия SSL/TLS.

Как и getHandshakeSession(), соединение может находиться в середине процесса рукопожатия. Протокол приложения может или может ещё не быть доступен.

Требования к реализации:
Реализация в этом классе выбрасывает UnsupportedOperationException и не выполняет никаких других действий.
Возвращает:
null, если ещё не определено, могут ли использоваться протоколы приложений для этого рукопожатия, пустой String, если значения протоколов приложения не будут использоваться, или непустой протокол приложения String, если значение было успешно согласовано.
Исключения:
UnsupportedOperationException - если базовый поставщик не реализует операцию.
С:
9

setHandshakeApplicationProtocolSelector

public void setHandshakeApplicationProtocolSelector(BiFunction<SSLSocket,​List<String>,​String> selector)

Регистрирует функцию обратного вызова, которая выбирает значение протокола приложения для рукопожатия SSL/TLS/DTLS. Функция переопределяет любые значения, предоставленные с помощью SSLParameters.setApplicationProtocols, и поддерживает следующие параметры типов:

SSLSocket
Первый аргумент функции позволяет просмотреть текущие SSLSocket, включая сеанс рукопожатия и настройки конфигурации.
List<String>
Второй аргумент функции перечисляет имена протоколов приложения, объявленные узлом TLS.
String
Результатом функции является имя протокола приложения или null, чтобы указать, что ни одно из объявленных имён не приемлемо. Если возвращаемое значение является пустым String, то указания протоколов приложения не будут использоваться. Если возвращаемое значение равно null (значение не выбрано) или является значением, которое не было объявлено узлом, базовый протокол определит, какие действия предпринять. (Например, ALPN отправит предупреждение "no_application_protocol" и прервёт соединение.)
Например, следующий вызов регистрирует функцию обратного вызова, которая анализирует параметры рукопожатия TLS и выбирает имя протокола приложения:
serverSocket.setHandshakeApplicationProtocolSelector(
         (serverSocket, clientProtocols) -> {
             SSLSession session = serverSocket.getHandshakeSession();
             return chooseApplicationProtocol(
                 serverSocket,
                 clientProtocols,
                 session.getProtocol(),
                 session.getCipherSuite());
         });

Примечание API:
Этот метод должен вызываться приложениями сервера TLS перед началом рукопожатия TLS. Кроме того, этот SSLSocket должен быть настроен с параметрами, совместимыми с выбранным протоколом приложения функцией обратного вызова. Например, включение плохого выбора наборов шифров может привести к отсутствию подходящего протокола приложения. См. SSLParameters.
Требования к реализации:
Реализация в этом классе выбрасывает UnsupportedOperationException и не выполняет никаких других действий.
Параметры:
selector - функция обратного вызова или null для отмены регистрации.
Исключения:
UnsupportedOperationException - если базовый поставщик не реализует операцию.
С:
9

getHandshakeApplicationProtocolSelector

public BiFunction<SSLSocket,List<String>,​String> getHandshakeApplicationProtocolSelector()

Возвращает функцию обратного вызова, которая выбирает значение протокола приложения во время рукопожатия SSL/TLS/DTLS. См. setHandshakeApplicationProtocolSelector для параметров типов функции.

Требования к реализации:
Реализация в этом классе выбрасывает UnsupportedOperationException и не выполняет никаких других действий.
Возвращает:
функцию обратного вызова или null, если она не была установлена.
Выбрасывает:
UnsupportedOperationException - если базовый поставщик не реализует операцию.
С:
9

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/net/ssl/SSLSocket.html

Spec-Zone .ru
спецификации, руководства, описания, API