Spec-Zone.ru › OpenJDK 8

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

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

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

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

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

protected SSLSocket(InetAddress address, int port)

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

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

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

protected SSLSocket(String host, int port)

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

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

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

Методы

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

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

String getApplicationProtocol()

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

abstract String[] getEnabledCipherSuites()

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

abstract String[] getEnabledProtocols()

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

abstract boolean getEnableSessionCreation()

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

String getHandshakeApplicationProtocol()

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

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

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

SSLSession getHandshakeSession()

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

abstract boolean getNeedClientAuth()

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

abstract SSLSession getSession()

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

SSLParameters getSSLParameters()

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

abstract String[] getSupportedCipherSuites()

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

abstract String[] getSupportedProtocols()

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

abstract boolean getUseClientMode()

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

abstract boolean getWantClientAuth()

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

abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)

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

abstract void setEnabledCipherSuites(String[] suites)

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

abstract void setEnabledProtocols(String[] protocols)

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

abstract void setEnableSessionCreation(boolean flag)

Управляет тем, могут ли быть созданы новые SSL-сессии этим сокетом.

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

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

abstract void setNeedClientAuth(boolean need)

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

void setSSLParameters(SSLParameters params)

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

abstract void setUseClientMode(boolean mode)

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

abstract void setWantClientAuth(boolean want)

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

abstract void startHandshake()

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

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

bind, close, connect, connect, getChannel, getInetAddress, getInputStream, getKeepAlive, getLocalAddress, getLocalPort, getLocalSocketAddress, getOOBInline, getOutputStream, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoLinger, getSoTimeout, getTcpNoDelay, getTrafficClass, isBound, isClosed, isConnected, isInputShutdown, isOutputShutdown, sendUrgentData, setKeepAlive, setOOBInline, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSocketImplFactory, setSoLinger, setSoTimeout, setTcpNoDelay, setTrafficClass, shutdownInput, shutdownOutput, 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()

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

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

getEnabledCipherSuites

public abstract String[] getEnabledCipherSuites()

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

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

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

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String[] suites)

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

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

См. 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 - если один или несколько протоколов, указанных в параметре, не поддерживаются, или если параметр protocols равен 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(), этот метод не инициирует начальное рукопожатие и не блокируется до завершения рукопожатия.

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

addHandshakeCompletedListener

public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)

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

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

removeHandshakeCompletedListener

public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)

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

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

startHandshake

public abstract void startHandshake()
                             throws IOException

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

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

Исключение:
IOException - при сетевой ошибке
См. также:
addHandshakeCompletedListener(HandshakeCompletedListener)

setUseClientMode

public abstract void setUseClientMode(boolean mode)

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

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

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

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

getUseClientMode

public abstract boolean getUseClientMode()

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

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

setNeedClientAuth

public abstract void setNeedClientAuth(boolean need)

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

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

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

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

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

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

getNeedClientAuth

public abstract boolean getNeedClientAuth()

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

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

setWantClientAuth

public abstract void setWantClientAuth(boolean want)

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

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

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

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

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

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

getWantClientAuth

public abstract boolean getWantClientAuth()

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

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

setEnableSessionCreation

public abstract void setEnableSessionCreation(boolean flag)

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

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

getEnableSessionCreation

public abstract boolean getEnableSessionCreation()

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

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

getSSLParameters

public SSLParameters getSSLParameters()

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

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

setSSLParameters

public void setSSLParameters(SSLParameters params)

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

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

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

getApplicationProtocol

public String getApplicationProtocol()

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

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

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

getHandshakeApplicationProtocol

public String getHandshakeApplicationProtocol()

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

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

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

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 — если базовый поставщик не реализует операцию.
С:
8

getHandshakeApplicationProtocolSelector

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

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

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

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

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