Класс 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() Возвращает |
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" и прервёт соединение.)
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.