Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class SSLSocket extends Socket
Socket
s и обеспечивает защищенный сокет, используя протоколы, такие как "Уровень защищенных сокетов" (SSL) или IETF "Безопасность Транспортного уровня" (TLS) протоколы. Такие сокеты являются нормальными потоковыми сокетами, но они добавляют уровень средств обеспечения безопасности по базовому сетевому транспортному протоколу, таких как TCP. Те защиты включают:
Эти виды защиты определяются "комплектом шифра", который является комбинацией криптографических алгоритмов, используемых данным соединением SSL. Во время процесса согласования эти две конечных точки должны договориться о ciphersuite, который доступен в обеих средах. Если нет такого комплекта вместе, никакое соединение SSL не может быть установлено, и никакие данные не могут быть переданы.
Используемый комплект шифра устанавливается процессом согласования, названным "квитированием". Цель этого процесса состоит в том, чтобы создать или воссоединиться с "сеансом", который может защитить много соединений в течение долгого времени. После того, как квитирование завершилось, можно получить доступ к атрибутам сеанса при использовании getSession метода. Начальное квитирование на этом соединении может инициироваться одним из трех способов:
startHandshake
который явно начинает квитирования, или getSession
делаются попытки установить сеанс, если нет никакого в настоящий момент допустимого сеанса, и неявного квитирования. Если квитирование перестало работать по какой-либо причине, SSLSocket
закрывается, и никакая futher связь не может быть сделана.
Есть две группы комплектов шифра, о которых Вы должны будете знать, управляя комплектами шифра:
Значения по умолчанию реализации требуют, что только комплекты шифра, которые аутентифицируют серверы и обеспечивают конфиденциальность быть включенными по умолчанию. Только если обе стороны явно соглашаются на неаутентифицируемую и/или нечастную (незашифрованную) связь, будет такой ciphersuite быть выбранным.
Когда SSLSocket
s сначала создаются, никакое квитирование не делается так, чтобы приложения могли сначала установить свое коммуникационное предпочтение: какие комплекты шифра использовать, должен ли сокет быть в клиенте или режиме сервера и т.д. Однако, безопасность всегда обеспечивается к тому времени, когда данные приложения отправляются по соединению.
Можно зарегистрироваться, чтобы получить уведомление о событии завершения квитирования. Это включает использование двух дополнительных классов. Объекты HandshakeCompletedEvent передают к экземплярам HandshakeCompletedListener, которые регистрируются пользователями этого API. SSLSocket
s создаются SSLSocketFactory
s, или accept
луг соединение от a SSLServerSocket
.
Сокет SSL должен хотеть работать в режиме сервера или клиенте. Это определит, кто начинает процесс квитирования, так же как какие сообщения должны быть отправлены каждой стороной. У каждого соединения должны быть один клиент и один сервер, или квитирование не будет прогрессировать должным образом. Как только начальное квитирование запустилось, сокет не может переключиться между режимами клиента и сервера, выполняя пересмотры.
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 завершилось на этом соединении.
|
abstract String[] |
getEnabledCipherSuites()
Возвращает имена комплектов шифра SSL, которые в настоящий момент включаются для использования на этом соединении.
|
abstract String[] |
getEnabledProtocols()
Возвращает имена версий протокола, которые в настоящий момент включаются для использования на этом соединении.
|
abstract boolean |
getEnableSessionCreation()
Возвращает true, если новые сеансы SSL могут быть установлены этим сокетом.
|
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 быть установлены этим сокетом.
|
abstract void |
setNeedClientAuth(boolean need)
Конфигурирует сокет, чтобы потребовать аутентификации клиента.
|
void |
setSSLParameters(SSLParameters params)
Применяет SSLParameters к этому сокету.
|
abstract void |
setUseClientMode(boolean mode)
Конфигурирует сокет, чтобы использовать клиент (или сервер) режим когда квитирование.
|
abstract void |
setWantClientAuth(boolean want)
Конфигурирует сокет, чтобы запросить аутентификацию клиента.
|
abstract void |
startHandshake()
Запускает квитирование SSL на этом соединении.
|
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
protected SSLSocket()
protected SSLSocket(String host, int port) throws IOException, UnknownHostException
Если есть менеджер безопасности, checkConnect
метод вызывают с адресом узла и port
как его параметры. Это могло привести к SecurityException.
host
- имя узла, с которым можно соединиться, или null
для петлевого адреса.port
- число порта сервераIOException
- если ошибка ввода-вывода происходит, создавая сокетSecurityException
- если менеджер безопасности существует и checkConnect
метод не позволяет работу.UnknownHostException
- если узел не известенIllegalArgumentException
- если параметр порта вне указанного диапазона допустимых значений порта, который является между 0 и 65535, включительно.SecurityManager.checkConnect(java.lang.String, int)
protected SSLSocket(InetAddress address, int port) throws IOException
Если есть менеджер безопасности, checkConnect
метод вызывают с адресом узла и port
как его параметры. Это могло привести к SecurityException.
address
- узел сервераport
- его портIOException
- если ошибка ввода-вывода происходит, создавая сокетSecurityException
- если менеджер безопасности существует и checkConnect
метод не позволяет работу.IllegalArgumentException
- если параметр порта вне указанного диапазона допустимых значений порта, который является между 0 и 65535, включительно.NullPointerException
- если address
нуль.SecurityManager.checkConnect(java.lang.String, int)
protected SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException, UnknownHostException
Если есть менеджер безопасности, 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)
protected SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException
Если есть менеджер безопасности, checkConnect
метод вызывают с адресом узла и port
как его параметры. Это могло привести к SecurityException.
address
- узел сервераport
- его портclientAddress
- адрес клиента сокет связывается с, или null
для anyLocal
адрес.clientPort
- порт клиента сокет связывается с, или zero
для системы, выбранной франко-порт.IOException
- если ошибка ввода-вывода происходит, создавая сокетSecurityException
- если менеджер безопасности существует и checkConnect
метод не позволяет работу.IllegalArgumentException
- если параметр порта или clientPort параметр вне указанного диапазона допустимых значений порта, который является между 0 и 65535, включительно.NullPointerException
- если address
нуль.SecurityManager.checkConnect(java.lang.String, int)
public abstract String[] getSupportedCipherSuites()
getEnabledCipherSuites()
, setEnabledCipherSuites(String [])
public abstract String[] getEnabledCipherSuites()
Даже если комплект был включен, он никогда не мог бы использоваться. (Например, коллега не поддерживает это, необходимые сертификаты (и закрытые ключи) для комплекта не доступны, или анонимный комплект включается, но аутентификация требуется.
getSupportedCipherSuites()
, setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
Каждый комплект шифра в suites
параметр, должно быть, был перечислен getSupportedCipherSuites (), или метод перестанет работать. После успешного вызова к этому методу, только комплекты, перечисленные в suites
параметр включается для использования.
См. getEnabledCipherSuites()
для получения дополнительной информации о том, почему определенный ciphersuite никогда не может использоваться на соединении.
suites
- Имена всех комплектов шифра, чтобы включитьIllegalArgumentException
- когда один или больше шифров, названных параметром, не поддерживается, или когда параметр является нулем.getSupportedCipherSuites()
, getEnabledCipherSuites()
public abstract String[] getSupportedProtocols()
public abstract String[] getEnabledProtocols()
setEnabledProtocols(String [])
public abstract void setEnabledProtocols(String[] protocols)
Протоколы, должно быть, были перечислены getSupportedProtocols()
как поддерживаемый. После успешного вызова к этому методу, только протоколы, перечисленные в protocols
параметр включается для использования.
protocols
- Имена всех протоколов, чтобы включить.IllegalArgumentException
- когда один или больше протоколов, названных параметром, не поддерживается или когда параметр протоколов является нулем.getEnabledProtocols()
public abstract SSLSession getSession()
Этот метод будет инициировать начальное квитирование в случае необходимости и затем блокировать, пока квитирование не было установлено.
Если ошибка происходит во время начального квитирования, этот метод возвращает недопустимый объект сеанса, который сообщает о недопустимом комплекте шифра "SSL_NULL_WITH_NULL_NULL".
SSLSession
public SSLSession getHandshakeSession()
SSLSession
будучи созданным во время квитирования SSL/TLS. Протоколы TLS могут согласовать параметры, которые необходимы при использовании экземпляра этого class, но перед SSLSession
был полностью инициализирован и сделан доступный через getSession
. Например, список алгоритмов действительной подписи может ограничить тип сертификатов, которые могут используемый во время решений TrustManager, или максимальные пакетные размеры фрагмента TLS могут быть изменены, чтобы лучше поддерживать сетевую среду.
Этот метод обеспечивает ранний доступ к SSLSession
быть созданным. В зависимости от того, как далеко прогрессировало квитирование, некоторые данные еще, возможно, не доступны для использования. Например, если удаленный сервер будет отправлять цепочку Сертификата, но что цепочка еще не была обработана, getPeerCertificates
метод SSLSession
бросит SSLPeerUnverifiedException. Как только та цепочка была обработана, getPeerCertificates
возвратит собственное значение.
В отличие от этого getSession()
, этот метод не инициирует начальное квитирование и не блокирует, пока квитирование не полно.
SSLSession
в настоящий момент быть согласованным.UnsupportedOperationException
- если базовый провайдер не реализует работу.SSLEngine
, SSLSession
, ExtendedSSLSession
, X509ExtendedKeyManager
, X509ExtendedTrustManager
public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
- слушатель события HandShake CompletedIllegalArgumentException
- если параметром является нуль.startHandshake()
, removeHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
- слушатель события HandShake CompletedIllegalArgumentException
- если слушатель не регистрируется, или параметром является нуль.addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void startHandshake() throws IOException
Если данные были уже отправлены на соединении, они продолжают течь во время этого квитирования. Когда квитирование завершится, это будет сообщено с событием. Этот метод синхронен для начального квитирования на соединении и возвращается, когда согласованное квитирование полно. Некоторые протоколы, возможно, не поддерживают многократные квитирования на существующем сокете и могут бросить IOException.
IOException
- на сетевой ошибке уровняaddHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void setUseClientMode(boolean mode)
Этот метод нужно вызвать прежде, чем любое квитирование происходит. Как только квитирование началось, режим не может быть сброшен для жизни этого сокета.
Серверы обычно аутентифицируют себя, и клиенты не обязаны делать так.
mode
- истина, если сокет должен запустить свое квитирование в "клиентском" режимеIllegalArgumentException
- если изменение режима предпринимается после того, как начальное квитирование началось.getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setNeedClientAuth(boolean need)
Установка аутентификации клиента сокета является одним из следующего:
В отличие от этого setWantClientAuth(boolean)
, если эта опция будет установлена, и клиент хочет не предоставлять информацию об аутентификации о себе, то согласования остановятся, и соединение будет отброшено.
Вызов этого метода переопределяет любую предыдущую установку, сделанную этим методом или setWantClientAuth(boolean)
.
need
- набор к истине, если аутентификация клиента требуется, или ложь, если никакая аутентификация клиента не требуется.getNeedClientAuth()
, setWantClientAuth(boolean)
, getWantClientAuth()
, setUseClientMode(boolean)
public abstract boolean getNeedClientAuth()
setNeedClientAuth(boolean)
, setWantClientAuth(boolean)
, getWantClientAuth()
, setUseClientMode(boolean)
public abstract void setWantClientAuth(boolean want)
Установка аутентификации клиента сокета является одним из следующего:
В отличие от этого setNeedClientAuth(boolean)
, если эта опция будет установлена, и клиент хочет не предоставлять информацию об аутентификации о себе, то согласования будут продолжаться.
Вызов этого метода переопределяет любую предыдущую установку, сделанную этим методом или setNeedClientAuth(boolean)
.
want
- набор к истине, если аутентификацию клиента требуют, или ложь, если никакая аутентификация клиента не требуется.getWantClientAuth()
, setNeedClientAuth(boolean)
, getNeedClientAuth()
, setUseClientMode(boolean)
public abstract boolean getWantClientAuth()
setNeedClientAuth(boolean)
, getNeedClientAuth()
, setWantClientAuth(boolean)
, setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
flag
- истина указывает, что сеансы могут быть созданы; это - значение по умолчанию. ложь указывает, что должен быть возобновлен существующий сеансgetEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)
public SSLParameters getSSLParameters()
public void setSSLParameters(SSLParameters params)
Это означает:
params.getCipherSuites()
ненуль, setEnabledCipherSuites()
вызывается с тем значением.params.getProtocols()
ненуль, setEnabledProtocols()
вызывается с тем значением.params.getNeedClientAuth()
или params.getWantClientAuth()
возвратиться true
, setNeedClientAuth(true)
и setWantClientAuth(true)
вызываются, соответственно; иначе setWantClientAuth(false)
вызывается.params.getServerNames()
ненуль, сокет сконфигурирует свои имена серверов с тем значением.params.getSNIMatchers()
ненуль, сокет сконфигурирует свой SNI matchers с тем значением.params
- параметрыIllegalArgumentException
- если setEnabledCipherSuites () или setEnabledProtocols () вызывают сбои
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92