Spec-Zone.ru › OpenJDK 24

Класс SSLSocket

java.lang.Object
java.net.Socket
javax.net.ssl.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-сокет должен выбрать работу в режиме клиента или сервера. Это определит, кто инициирует процесс рукопожатия, а также какие сообщения должны отправляться каждой стороной. Каждое соединение должно иметь один клиент и один сервер, иначе рукопожатие не будет правильно выполнено. После начала первоначального рукопожатия сокет не может переключаться между режимами клиента и сервера, даже при повторных рукопожатиях.

Значения String протокола приложения, возвращаемые методами в этом классе, представлены в сетевом байтовом представлении, отправленном партнёром. Байты могут быть напрямую сравнены или преобразованы в его формат Unicode String для сравнения.

     String networkString = sslSocket.getHandshakeApplicationProtocol();
     byte[] bytes = networkString.getBytes(StandardCharsets.ISO_8859_1);

     //
     // Match using bytes:
     //
     //   "http/1.1"                       (7-bit ASCII values same in UTF-8)
     //   MEETEI MAYEK LETTERS "HUK UN I"  (Unicode 0xabcd->0xabcf)
     //
     String HTTP1_1 = "http/1.1";
     byte[] HTTP1_1_BYTES = HTTP1_1.getBytes(StandardCharsets.UTF_8);

     byte[] HUK_UN_I_BYTES = new byte[] {
         (byte) 0xab, (byte) 0xcd,
         (byte) 0xab, (byte) 0xce,
         (byte) 0xab, (byte) 0xcf};

     if ((Arrays.compare(bytes, HTTP1_1_BYTES) == 0 )
             || Arrays.compare(bytes, HUK_UN_I_BYTES) == 0) {
        ...
     }

     //
     // Alternatively match using string.equals() if we know the ALPN value
     // was encoded from a String using a certain character set,
     // for example UTF-8.  The ALPN value must first be properly
     // decoded to a Unicode String before use.
     //
     String unicodeString = new String(bytes, StandardCharsets.UTF_8);
     if (unicodeString.equals(HTTP1_1)
             || unicodeString.equals("\uabcd\uabce\uabcf")) {
         ...
     }
 
Примечание API:
Когда соединение больше не нужно, клиенты и серверные приложения должны закрыть обе стороны своего соответствующего соединения. Это можно сделать одним разом, вызвав Socket.close(), или закрыв каждую сторону по отдельности, используя Socket.shutdownOutput() / Socket.shutdownInput(), что полезно для версий протоколов, которые поддерживают полузакрытые соединения.

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

После закрытия SSLSocket, он больше не может быть повторно использован: необходимо создать новый SSLSocket.

С:
1.4
См. также:
  • Socket
  • SSLServerSocket
  • SSLSocketFactory

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

SSLSocket()
SSLSocket(String host, int port)
SSLSocket(String host, int port, InetAddress clientAddress, int clientPort)
SSLSocket(InetAddress address, int port)
SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort)
Модификатор Конструктор Описание
protected
Используется только подклассами.
protected
Используется только подклассами.
protected
Используется только подклассами.
protected
Используется только подклассами.
protected
Используется только подклассами.

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

Модификатор и тип Метод Описание
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-клиент.
Параметры:
host - имя хоста, с которым необходимо подключиться, или null для адреса обратной петли.
port - номер порта сервера
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
UnknownHostException - если хост не известен
IllegalArgumentException - если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.

SSLSocket

protected SSLSocket(InetAddress address, int port) throws IOException
Используется только подклассами. Создаёт TCP-соединение с сервером по указанному адресу и порту. Действует как SSL-клиент.
Параметры:
address - хост сервера
port - его порт
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
IllegalArgumentException - если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.

SSLSocket

protected SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException, UnknownHostException
Используется только подклассами. Создаёт SSL-соединение с указанным хостом на указанном порту, связывая клиентскую сторону соединения с заданным адресом и портом. Действует как SSL-клиент.
Параметры:
host - имя хоста, с которым необходимо подключиться, или null для адреса обратной петли.
port - номер порта сервера
clientAddress - адрес клиента, к которому привязан сокет, или null для адреса anyLocal.
clientPort - порт клиента, к которому привязан сокет, или zero для произвольного свободного порта.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
UnknownHostException - если хост не известен
IllegalArgumentException - если параметр порта или clientPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.

SSLSocket

protected SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException
Используется только подклассами. Создаёт SSL-соединение с сервером по указанному адресу и TCP-порту, привязывая клиентскую сторону соединения к заданному адресу и порту. Действует как SSL-клиент.
Параметры:
address - хост сервера
port - его порт
clientAddress - адрес клиента, к которому привязан сокет, или null для адреса anyLocal.
clientPort - порт клиента, к которому привязан сокет, или zero для произвольного свободного порта.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода
IllegalArgumentException - если параметр порта или clientPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.

Подробное описание методов

getSupportedCipherSuites

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

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

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

getEnabledCipherSuites

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

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

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

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

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String[] suites)
Устанавливает наборы шифров, включённые для использования в этом соединении.

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

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

См. 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".

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

getHandshakeSession

public SSLSession getHandshakeSession()
Возвращает SSLSession, создаваемый во время рукопожатия SSL/TLS.

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

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

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

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

addHandshakeCompletedListener

public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)
Регистрирует обработчик событий для получения уведомлений о завершении рукопожатия SSL в этом соединении.
Parameters:
listener - обработчик событий завершения рукопожатия
Throws:
IllegalArgumentException - если аргумент равен null.
See Also:
  • startHandshake()
  • removeHandshakeCompletedListener(HandshakeCompletedListener)

removeHandshakeCompletedListener

public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
Удаляет ранее зарегистрированный обработчик завершения рукопожатия.
Parameters:
listener - обработчик событий завершения рукопожатия
Throws:
IllegalArgumentException - если обработчик не зарегистрирован или аргумент равен null.
See Also:
  • addHandshakeCompletedListener(HandshakeCompletedListener)

startHandshake

public abstract void startHandshake() throws IOException
Инициирует SSL-рукопожатие в этом соединении. Частые причины включают необходимость использования новых ключей шифрования, изменения наборов шифров или начало новой сессии. Для принудительной полной повторной аутентификации текущая сессия может быть аннулирована перед началом этого рукопожатия.

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

Throws:
IOException - при ошибке на сетевом уровне
See Also:
  • addHandshakeCompletedListener(HandshakeCompletedListener)

setUseClientMode

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

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

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

Parameters:
mode - true, если сокет должен начать рукопожатие в режиме "клиента"
Throws:
IllegalArgumentException - если попытка изменения режима выполняется после начала первоначального рукопожатия.
See Also:
  • getUseClientMode()

getUseClientMode

public abstract boolean getUseClientMode()
Возвращает true, если сокет настроен на использование клиентского режима при рукопожатии.
Returns:
true, если сокет должен выполнять рукопожатие в режиме "клиента"
See Also:
  • setUseClientMode(boolean)

setNeedClientAuth

public abstract void setNeedClientAuth(boolean need)
Настраивает сокет для требования аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.

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

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

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

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

Parameters:
need - установить в true, если требуется аутентификация клиента, или в false, если аутентификация клиента не требуется.
See Also:
  • getNeedClientAuth()
  • setWantClientAuth(boolean)
  • getWantClientAuth()
  • setUseClientMode(boolean)

getNeedClientAuth

public abstract boolean getNeedClientAuth()
Возвращает true, если сокет требует аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.
Returns:
true, если требуется аутентификация клиента, или false, если аутентификация клиента не требуется.
See Also:
  • setNeedClientAuth(boolean)
  • setWantClientAuth(boolean)
  • getWantClientAuth()
  • setUseClientMode(boolean)

setWantClientAuth

public abstract void setWantClientAuth(boolean want)
Настраивает сокет для запроса аутентификации клиента. Этот параметр полезен только для сокетов в серверном режиме.

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

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

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

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

Parameters:
want - установить в true, если запрашивается аутентификация клиента, или в false, если аутентификация клиента не требуется.
See Also:
  • getWantClientAuth()
  • setNeedClientAuth(boolean)
  • getNeedClientAuth()
  • setUseClientMode(boolean)

getWantClientAuth

public abstract boolean getWantClientAuth()
Возвращает true, если сокет запрашивает аутентификацию клиента. Этот параметр полезен только для сокетов в серверном режиме.
Returns:
true, если запрашивается аутентификация клиента, или false, если аутентификация клиента не требуется.
See Also:
  • setNeedClientAuth(boolean)
  • getNeedClientAuth()
  • setWantClientAuth(boolean)
  • setUseClientMode(boolean)

setEnableSessionCreation

public abstract void setEnableSessionCreation(boolean flag)
Управляет тем, могут ли быть установлены новые сессии SSL этим сокетом. Если создание сессий запрещено, и нет существующих сессий для возобновления, рукопожатие не будет успешным.
Parameters:
flag - true означает, что сессии могут быть созданы; это значение по умолчанию. false означает, что существующая сессия должна быть возобновлена
See Also:
  • getEnableSessionCreation()

getEnableSessionCreation

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

getSSLParameters

public SSLParameters getSSLParameters()
Возвращает параметры SSL, действующие для этого SSLSocket. Наборы шифров и протоколы возвращаемых SSLParameters всегда не равны null.
Возвращает:
параметры SSL, действующие для этого 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
Внешние спецификации
  • RFC 7301: Расширение согласования протоколов приложений транспортного уровня безопасности (TLS)

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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/javax/net/ssl/SSLSocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API