Spec-Zone.ru › OpenJDK 21

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

Значения ApplicationProtocol 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-клиент.

Если существует менеджер безопасности, его метод 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 спецификации Java Security Standard Algorithm Names, и также может включать другие наборы шифрования, которые поддерживает поставщик.

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

getEnabledCipherSuites

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

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

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

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

setEnabledCipherSuites

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

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

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

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

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

getSupportedProtocols

public abstract String[] getSupportedProtocols()
Возвращает имена протоколов, которые могут быть включены для использования в SSL-соединении.
Возвращает:
массив поддерживаемых протоколов

getEnabledProtocols

public abstract String[] getEnabledProtocols()
Возвращает имена версий протоколов, которые в настоящее время включены для использования в этом соединении.

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

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

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 (Application-Layer Protocol Negotiation), могут согласовывать значения на уровне приложения между узлами.

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

getHandshakeApplicationProtocol

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

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

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

setHandshakeApplicationProtocolSelector

public void setHandshakeApplicationProtocolSelector(BiFunction<SSLSocket,List<String>,String> selector)
Регистрирует функцию обратного вызова, которая выбирает значение протокола приложения для рукопожатия SSL/TLS/DTLS. Функция переопределяет любые значения, заданные с помощью SSLParameters.setApplicationProtocols, и поддерживает следующие типы параметров:
SSLSocket
Первый аргумент функции позволяет проверить текущие SSLSocket, включая сеанс рукопожатия и параметры конфигурации.
List<String>
Второй аргумент функции перечисляет имена протоколов приложения, объявленные узлом TLS.
String
Результатом функции является имя протокола приложения или null, чтобы указать, что ни одно из объявленных имен не подходит. Если возвращаемое значение — пустая строка, то указания протоколов приложения не будут использоваться. Если возвращаемое значение равно 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, 2023, 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/21/docs/api/java.base/javax/net/ssl/SSLSocket.html

Spec-Zone.ru

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