Spec-Zone.ru › OpenJDK 17

Класс 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 {code 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:
Когда соединение больше не нужно, клиенты и серверы должны каждый закрыть обе стороны своего соответствующего соединения. Для SSLSocket объектов, например, приложение может вызвать Socket.shutdownOutput() или OutputStream.close() для закрытия потока вывода и вызвать Socket.shutdownInput() или InputStream.close() для закрытия потока ввода. Обратите внимание, что в некоторых случаях закрытие потока ввода может зависеть от закрытия потока вывода партнёром. Если соединение не закрывается в порядке (например, 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-клиент.

Если существует менеджер безопасности, его метод 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 - если параметр порта или clientPort находится вне указанного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.
См. также:
  • SecurityManager.checkConnect(java.lang.String, int)

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

getSupportedCipherSuites

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

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

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

getEnabledCipherSuites

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

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

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

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

setEnabledCipherSuites

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

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

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

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

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

getSession

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

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

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

Returns:
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, если сокет будет запрашивать аутентификацию клиента. Этот параметр полезен только для сокетов в режиме сервера.
Возвращает:
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, 2021, 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/17/docs/api/java.base/javax/net/ssl/SSLSocket.html

Spec-Zone.ru

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