SSLEngine Класс

Определение

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

[Android.Runtime.Register("javax/net/ssl/SSLEngine", DoNotGenerateAcw=true)]
public abstract class SSLEngine : Java.Lang.Object
[<Android.Runtime.Register("javax/net/ssl/SSLEngine", DoNotGenerateAcw=true)>]
type SSLEngine = class
    inherit Object
Наследование
SSLEngine
Атрибуты

Комментарии

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

К режимам безопасного взаимодействия относятся: <UL>

<LI><em>Integrity Protection</em>. SSL/TLS защищает от изменения сообщений активным проводным приложением.

<LI><em>Authentication</em>. В большинстве режимов SSL/TLS обеспечивает одноранговую проверку подлинности. Серверы обычно проходят проверку подлинности, и клиенты могут проходить проверку подлинности по запросу серверов.

<LI><em>Конфиденциальность (защита конфиденциальности)</em>. В большинстве режимов SSL/TLS шифрует данные, передаваемые между клиентом и сервером. Это защищает конфиденциальность данных, чтобы пассивные пользователи не видели конфиденциальные данные, такие как финансовая или личная информация многих видов.

</УЛ>

Эти виды защиты определяются "набором шифров", который представляет собой сочетание криптографических алгоритмов, используемых данным SSL-подключением. В процессе согласования обе конечные точки должны согласовать набор шифров, доступный в обеих средах. Если такого набора общих нет, ssl-подключение установить не удастся, и данные не могут быть обменяться.

Используемый набор шифров устанавливается процессом согласования, который называется "подтверждением". Цель этого процесса — создать или повторно присоединиться к сеансу, который может защитить множество подключений с течением времени. После завершения подтверждения можно получить доступ к атрибутам сеанса #getSession() с помощью метода .

Класс SSLSocket предоставляет практически те же функции безопасности, но все входящие и исходящие данные автоматически передаются с помощью базового java.net.Socket Socket, который по умолчанию использует модель блокировки. Хотя это подходит для многих приложений, эта модель не обеспечивает масштабируемость, необходимую для больших серверов.

Основное различие SSLEngine заключается в том, что он работает с входящими и исходящими потоками байтов, независимо от механизма транспорта. Пользователь несет ответственность за организацию надежной SSLEngine передачи операций ввода-вывода в одноранговый узел. Отделяя абстракцию SSL/TLS от механизма транспорта ввода-вывода, SSLEngine можно использовать для широкого спектра типов ввода-вывода, таких как java.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling), java.nio.channels.Selector selectable non-blocking I/Ojava.net.Socket Socket и традиционные потоки ввода-вывода, локальные java.nio.ByteBuffer ByteBuffers или байтовые массивы, будущие асинхронные модели ввода-вывода и т. д.

На высоком уровне отображается SSLEngine следующим образом:

app data

                           |           ^
                           |     |     |
                           v     |     |
                      +----+-----|-----+----+
                      |          |          |
                      |       SSL|Engine    |
              wrap()  |          |          |  unwrap()
                      | OUTBOUND | INBOUND  |
                      |          |          |
                      +----+-----|-----+----+
                           |     |     ^
                           |     |     |
                           v           |

                              net data

Данные приложения (также известные как открытый текст или открытый текст) — это данные, которые создаются или используются приложением. Его аналогом являются сетевые данные, состоящие из данных подтверждения и (или) зашифрованного текста и предназначенные для передачи через механизм ввода-вывода. Входящие данные — это данные, полученные от однорангового узла, а исходящие данные предназначены для однорангового узла.

(В контексте SSLEngineтермин "данные подтверждения" означает любые данные, передаваемые для установления безопасного подключения и управления ими. Данные подтверждения включают сообщения SSL/TLS", "оповещение", "change_cipher_spec" и "подтверждение".

Существует пять отдельных этапов для SSLEngine.

<Ol><li> Creation — SSLEngine объект был создан и инициализирован, но еще не использовался. На этом этапе приложение может задать какие-либо SSLEngineпараметры (включенные комплекты шифров, следует ли SSLEngine подтверждение в режиме клиента или сервера и т. д.). Однако после начала подтверждения все новые параметры (кроме режима клиента или сервера, см. ниже) будут использоваться для следующего подтверждения.

<li> Initial Handshake — начальное подтверждение — это процедура, с помощью которой два одноранговых узла обмениваются параметрами связи до тех пор, пока не будет установлено SSLSession. Данные приложения не могут быть отправлены на этом этапе.

<Li> Application Data ( Данные приложения) — после установки параметров связи и завершения подтверждения данные приложения могут проходить через SSLEngine. Исходящие сообщения приложений шифруются и защищаются на целостность, а входящие сообщения отменяют процесс.

<li> Rehandshaking — обе стороны могут запросить повторное согласование сеанса в любое время на этапе данных приложения. Новые данные подтверждения можно скрестить между данными приложения. Перед началом этапа повторной отработки приложение может сбросить параметры связи SSL/TLS, такие как список включенных шифров и необходимость использования проверки подлинности клиента, но не может меняться между режимами клиента и сервера. Как и раньше, после начала подтверждения все новые SSLEngine параметры конфигурации не будут использоваться до следующего подтверждения.

<Li> Close — если подключение больше не требуется, приложение должно закрыть SSLEngine и отправить или получить все оставшиеся сообщения в одноранговый узел, прежде чем закрыть базовый механизм транспорта. После закрытия подсистемы его нельзя использовать повторно: необходимо создать новый SSLEngine . </OL> Создается SSLEngine путем вызова SSLContext#createSSLEngine() из инициализированного SSLContextобъекта . Перед первым вызовом wrap(), unwrap()или beginHandshake()необходимо задать все параметры конфигурации. Все эти методы запускают начальное подтверждение.

Данные перемещаются через подсистему путем вызова #wrap(ByteBuffer, ByteBuffer) wrap() или #unwrap(ByteBuffer, ByteBuffer) unwrap() для исходящих или входящих данных соответственно. В зависимости от состояния SSLEngine, wrap() вызов может использовать данные приложения из исходного буфера и создавать сетевые данные в целевом буфере. Исходящие данные могут содержать данные приложения и (или) подтверждения. Вызов unwrap() будет проверять исходный буфер и может ускорить подтверждение, если данные являются данными подтверждения, или может поместить данные приложения в буфер назначения, если данные являются приложением. Состояние базового алгоритма SSL/TLS определяет, когда используются и создаются данные.

wrap() Вызывает и unwrap() возвращает , SSLEngineResult который указывает состояние операции и (необязательно) способ взаимодействия с подсистемой для выполнения.

создает SSLEngine или использует только полные пакеты SSL/TLS и не хранит данные приложения внутри между вызовами wrap()/unwrap(). Таким образом, входные и выходные ByteBufferданные должны иметь соответствующий размер, чтобы вместить максимальную запись, которую можно создать. SSLSession#getPacketBufferSize() Вызовы и SSLSession#getApplicationBufferSize() должны использоваться для определения соответствующих размеров буфера. Размер буфера данных исходящего приложения обычно не имеет значения. Если условия буфера не позволяют правильное потребление и производство данных, приложение должно определить (через SSLEngineResult) и устранить проблему, а затем повторить вызов.

Например, возвращает SSLEngineResult.Status#BUFFER_OVERFLOW результат, unwrap() если подсистема определяет, что недостаточно свободного места в буфере назначения. Приложения должны вызывать SSLSession#getApplicationBufferSize() и сравнивать это значение с пространством, доступным в буфере назначения, при необходимости увеличивая буфер. Аналогичным образом, если unwrap() требуется вернуть SSLEngineResult.Status#BUFFER_UNDERFLOW, приложение должно вызвать , SSLSession#getPacketBufferSize() чтобы убедиться, что в исходном буфере достаточно места для хранения записи (при необходимости увеличивается), а затем получить больше входящих данных.

{@code
              SSLEngineResult r = engine.unwrap(src, dst);
              switch (r.getStatus()) {
              BUFFER_OVERFLOW:
                  // Could attempt to drain the dst buffer of any already obtained
                  // data, but we'll just increase it to the size needed.
                  int appSize = engine.getSession().getApplicationBufferSize();
                  ByteBuffer b = ByteBuffer.allocate(appSize + dst.position());
                  dst.flip();
                  b.put(dst);
                  dst = b;
                  // retry the operation.
                  break;
              BUFFER_UNDERFLOW:
                  int netSize = engine.getSession().getPacketBufferSize();
                  // Resize buffer if needed.
                  if (netSize > dst.capacity()) {
                      ByteBuffer b = ByteBuffer.allocate(netSize);
                      src.flip();
                      b.put(src);
                      src = b;
                  }
                  // Obtain more inbound network data for src,
                  // then retry the operation.
                  break;
              // other cases: CLOSED, OK.
              }
            }

В отличие от SSLSocket, все методы SSLEngine не блокируются. SSLEngine Для реализации могут потребоваться результаты задач, выполнение которых может занять длительное время, или может даже блокироваться. Например, TrustManager может потребоваться подключиться к удаленной службе проверки сертификатов или KeyManager может потребоваться предложить пользователю определить, какой сертификат следует использовать в рамках проверки подлинности клиента. Кроме того, создание криптографических подписей и их проверка могут быть медленными и, казалось бы, блокирующими.

Для любой операции, которая потенциально может блокироваться, SSLEngine будет создаваться делегированная java.lang.Runnable задача. Если SSLEngineResult указывает, что требуется результат делегированной задачи, приложение должно вызвать #getDelegatedTask() для получения невыполненных делегированных задач и вызвать ее java.lang.Runnable#run() run() метод (возможно, используя другой поток в зависимости от стратегии вычислений). Приложение должно продолжать получать делегированные задачи до тех пор, пока больше не будет существовать, и повторите исходную операцию.

В конце сеанса связи приложения должны правильно закрыть ссылку SSL/TLS. Протоколы SSL/TLS имеют сообщения подтверждения закрытия, и эти сообщения должны быть переданы одноранговой системе перед освобождением SSLEngine и закрытием базового механизма транспорта. Закрытие может быть инициировано одним из следующих методов: SSLException, сообщением подтверждения закрытия входящего трафика или одним из методов закрытия. Во всех случаях обработчик создает сообщения подтверждения закрытия и wrap() должен вызываться повторно до тех пор, пока результирующее SSLEngineResultсостояние не вернет "CLOSED" или #isOutboundDone() true. Все данные, wrap() полученные из метода , должны отправляться в одноранговый узел.

#closeOutbound() используется, чтобы сигнализировать подсистеме о том, что приложение не будет отправлять больше данных.

Одноранговый узел сообщит о своем намерении закрыться, отправив собственное сообщение подтверждения закрытия. После того как это сообщение будет получено и обработано вызовом локального SSLEngineunwrap() сервера, приложение может обнаружить закрытие, вызвав unwrap() и выполнив поиск с состоянием SSLEngineResult "CLOSED", или , если #isInboundDone() возвращает значение true. Если по какой-либо причине одноранговый узел закрывает канал связи, не отправляя соответствующее сообщение о закрытии SSL/TLS, приложение может обнаружить конец потока и сообщить подсистеме, #closeInbound() что входящие сообщения больше не будут обрабатываться. Некоторые приложения могут требовать от однорангового узла упорядоченные сообщения о завершении работы. В этом случае они могут проверка, что закрытие было создано сообщением подтверждения, а не условием окончания потока.

Существует две группы комплектов шифров, о которых необходимо знать при управлении комплектами шифров:

<Комплекты шифров UL><LI><em>Supported</em> : все наборы, поддерживаемые реализацией SSL. Этот список отображается с помощью #getSupportedCipherSuites().

<Комплекты шифров LI><em>Enabled</em> , которые могут быть меньше, чем полный набор поддерживаемых наборов. Эта группа задается с помощью #setEnabledCipherSuites(String []) метода и запрашивается с помощью #getEnabledCipherSuites() метода . Изначально набор комплектов шифров по умолчанию будет включен в новом механизме, который представляет минимальную рекомендуемую конфигурацию. </УЛ>

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

Каждое подключение SSL/TLS должно иметь один клиент и один сервер, поэтому каждая конечная точка должна решить, какую роль следует взять на себя. Этот выбор определяет, кто начинает процесс подтверждения, а также тип сообщений, которые должны отправляться каждой стороной. Метод #setUseClientMode(boolean) настраивает режим . После запуска SSLEngine начального подтверждения нельзя переключаться между режимами клиента и сервера, даже при выполнении повторных переговоров.

Приложения могут обрабатывать делегированные задачи в разных потоках. SSLEngine При создании сохраняется текущий java.security.AccessControlContext объект . Все будущие делегированные задачи будут обрабатываться с использованием этого контекста: то есть все решения по управлению доступом будут приниматься с использованием контекста, записанного при создании подсистемы.

<HR>

<B>Примечания о< параллелизме/B>. Существует две проблемы параллелизма, которые следует учитывать:

<OL><li>Методы wrap() и unwrap() могут выполняться параллельно друг с другом.

<Li> Протоколы SSL/TLS используют упорядоченные пакеты. Приложения должны позаботиться о том, чтобы созданные пакеты доставлялись последовательно. Если пакеты поступают не по порядку, могут возникнуть непредвиденные или неустранимые результаты.

Пример:

synchronized (outboundLock) {
                             sslEngine.wrap(src, dst);
                             outboundQueue.put(dst);
                         }

Как следствие, два потока не должны пытаться одновременно вызывать один и тот же метод (или wrap()unwrap()), так как невозможно гарантировать упорядочение пакетов в конечном итоге. </ПР>

<h3>Конфигурация по умолчанию для разных версий< Android/h3>

SSLEngine Экземпляры, полученные по умолчанию SSLContext , настраиваются следующим образом:

<style type="text/css"> tr.deprecated { background-color: #ccc; color: #999; font-style: italic; }</Стиль>

<h4>Protocols</h4><table><thead><tr th><>Protocol</th<>>Supported (API Levels)</th th>><Enabled by default (API Levels)</th></tr<>/thead<>tbody><tr class="deprecated"<>td>SSLv3</td><td>1– 25</td><td>1– 22</td></tr tr>><<td>TLSv1</td<>td>1+</td<>td>1+</td<>/tr<>tr><td>TLSv1.1</td<>td>20+</t td>><20+</td></tr><tr><td>TLSv1.2</td><td>20+</td><td>20+</td<>/tr tr<>><td>TLSv1.3</Td><td>29+</td<>td>29+</td></tr<>/tbody></table>

<h4>Комплекты шифров</h4><table<>thead><tr th>><Cipher suite</th><>Supported (API Levels)</th th><>Enabled by default (API Levels)</th/tr><<>/thead<>tbody><tr class="deprecated"><td>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td<>td>9-22</td<>td>9-19</td></tr><tr class="deprecated"><td>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td<>td>9-22</td><td>9-19</td<>/tr><tr class="deprecated"><td>SSL_DHE_DSS_WITH_DES_CBC_SHA</td><td>9-22</td><td>9-19</td></tr><tr class="deprecated"<>td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td><td>9-19</td></tr tr><class="deprecated"><td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td><td>9-22/td<>td>9-19</td></20< tr<>class="deprecated"<>td>SSL_DHE_RSA_WITH_DES_CBC_SHA</td><td>9-22</td><td>9-19</td<>/tr tr<>class="deprecated"><td>SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td<>td></td></tr tr<>class="deprecated"<>td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td<>td>9-22</td><td></td></tr tr<>class="deprecated"<>td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td><td>9-22</Td><td></td></tr tr><class="deprecated"><td>SSL_DH_anon_WITH_DES_CBC_SHA</td><td>9-22</td><td></td<>/tr<>class="deprecated"><td>SSL_DH_anon_WITH_RC4_128_MD5</td<>td>9-22</td><td></td></tr tr<>class="deprecated"><td SSL_RSA_EXPORT_><WITH_DES40_CBC_SHA/td><td>9-22</td<>td>9-19</td<>/tr><tr class="deprecated"<>td>SSL_RSA_EXPORT_WITH_RC4_40_MD5</td<>td>9-22</td<>td>9-19</td></tr><tr<>td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td><td>9+</td><td>9-19</Td></tr>tr class="deprecated"><td>SSL_RSA_WITH_DES_CBC_SHA</td<>td>9-22</td><td>9-19</td></tr tr><class="deprecated"<>td>SSL_RSA_WITH_NULL_MD5</td<>td>9-22</td td></td<><>/tr><tr class="deprecated"<>td>SSL_RSA_WITH_NULL_SHA</td><<td>9-22</td><td></td<>/tr><class="deprecated"<>td>SSL_RSA_WITH_RC4_128_MD5</td><td>9-25</td<>td>9-19</td<>/tr tr><class="deprecated"><td>SSL_RSA_WITH_RC4_128_SHA</td<>td>9-25</td<>td>9-23</td></tr><Tr><td>TLS_AES_128_GCM_SHA256</td><td>29+</td><td>29+</td></tr>><<td>TLS_AES_256_GCM_SHA384</td<>td>29+</td><td>29+</td<>/tr<>><td td>TLS_CHACHA20_POLY1305_SHA256</td<>td>29+</td><td 29+/td td>29+</td></Tr><tr class="deprecated">td>TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td><td>1-8</td<>td>1-8</td></tr tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td<>td>1-8</td><td>1-8</td<>/tr<>tr class="deprecated"><td TLS_DHE_DSS_WITH_AES_128_><<CBC_SHA/td><td>9-22</td<>td>9-22</td<>/tr><tr class="deprecated"><td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</td><td>20-22</td<>td></td></tr tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td><td>20-22</td><td></Td></tr>tr class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td<>td>9-22</td><td>20-22</td></tr tr><class="deprecated"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</td<>td>20-22</td><td></td<>/tr<>class="deprecated"><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/td><td>20-22</td<>td></td></tr tr<>class="deprecated"><td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td<>td>1-8</td><td>1-8</td></tr tr><class="deprecated"<>td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td>1-8</td><td>1-8</td<>/tr tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td<>td>1-8</td<>td>1-8</td<>/tr><class="deprecated"><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td><td>9-25</td><td>9-25</td<>/tr><tr class="deprecated" ><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</td<>td>20-25</td><td></td></tr tr><class="deprecated"<>td>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</td><td>20-25</td<>td>20-25</td<>/tr tr<>class="deprecated"<>td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</td><td>9-25</td><td>20-25</td<>/tr tr><class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</td><td>20-25</td<>td></td></tr><class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td><td>20-25</td<>td>20-25</td></tr><tr class="deprecated"<>td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td<>td>1-8</td<>td>1-8</td></tr tr><class="deprecated"<>td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td><td>1-8</td><td></td></tr tr<>class="deprecated"><td>TLS_DH_DSS_ <WITH_3DES_EDE_CBC_SHA/td<>td>1-8</td><td></td<>/tr tr<>class="deprecated"><td>TLS_DH_DSS_WITH_DES_CBC_SHA</td><td>1-8</td<>td></td<>/tr tr><class="deprecated"<>td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td<>td>1-8</td><td></td></tr><tr class="deprecated"<>td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td<>td></td></tr tr<>class="deprecated"<>td>TLS_DH_RSA_WITH_DES_CBC_SHA</td<>td>1-8</td td></td<><>/tr tr<>class="deprecated"><td TLS_DH_anon_EXPORT_WITH_><DES40_CBC_SHA/td><td>1-8</td><td></td<>/tr tr><class="deprecated"><td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td<>td></td></tr tr><class="deprecated"><td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td><td>9-22</td td<>></td></Tr><tr class="deprecated">td>TLS_DH_anon_WITH_AES_128_CBC_SHA256</td<>td>20-22</td<>td></td></tr tr><class="deprecated"<>td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</td><td>20-22</td td></td><<>/tr<>tr class="deprecated"><td>TLS_DH_anon_WITH_AES_256_CBC_SHA/<< td><td>9-22</td<>td></td<>/tr><tr class="deprecated"><td>TLS_DH_anon_WITH_AES_256_CBC_SHA256</td<>td>20-22</td><td></td<>/tr tr<>class="deprecated"<>td>TLS_DH_anon_WITH_AES_256_GCM_SHA384</td><td>20-22</td td<><>/td></tr><tr class="deprecated"<>td>TLS_DH_anon_WITH_DES_CBC_SHA</td><td>1-8</td<>td></td></tr tr><class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td<>td>20-22</td td></td<>></tr><tr<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td><td>20+</td><td>20+</td<>/tr><tr class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td<>td>20-28</td><td></td></tr<>td>><TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</td<>td>20+</td><td>20+</td/ td/>< tr><tr<>td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td<>td>20+</td<>td>20+</td></tr tr<>class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td<>td>20-28</td><td></td></tr><tr<>td>TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384/< td><td>20+</td><td>20+</td<>/tr<><>td>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</td><td>24+</td><td>24+</td<>/tr tr><class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_NULL_SHA</td<>td>20-22</td><td/>< td></tr<>tr class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</td><td>20-25</td<>td>20-23</td></tr>><<td>TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA</td><td>21+</td td 21+/td><td>21+</td<>/tr tr>><<Td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/td<>td>21+</td><td>21+</td<>/tr><td><>TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256</td<>td>24+</td><td>24+</td<>/tr<>tr class="deprecated"<>td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</tdtd>20-22</td<>td></td<>/tr><td>><TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td<>td>20+</td<>td>20+</td></tr><tr class="deprecated"<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</td><td>20-28</td td<>><></Td></tr><tr><td>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</td<>td>20+</td<>td>20+</td<>/tr<<>>td>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</td<>td>20+</td<>td>20+</td></tr tr<>class="deprecated"><td TLS_><ECDHE_RSA_WITH_AES_256_CBC_SHA384/td<>td>20-28</td<>td></td<>/tr<>td<>>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</td<>td>20+</td><td>20+</td></tr<>tr<>td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td><td>24+</td><td>24+</td<>/tr<>tr class="deprecated"><td>TLS_ECDHE_RSA_WITH_NULL_SHA</td><td>20-22</td<>td></td></tr tr><class="deprecated"><td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td><td>20-25</td<>td>20-23</td></tr<>tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td><td>20-22</td><td></td></tr tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td<>td>20-22</td><td></td<>/tr><tr class=" не рекомендуется">td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td<>td>20-22</td><td></td<>/tr tr<>class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td<>td>20-22</td<>td></td<>/tr tr<>class="deprecated"><td TLS_ECDH_><<ECDSA_WITH_AES_256_CBC_SHA/td><td>20-22</td<>td></td<>/tr tr<>class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td<>td>20-22</td><td></td<>/tr tr<>class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384</td><td>20-22</td<>td></td></tr><tr class="deprecated"><td>TLS_ECDH_ECDSA_WITH_NULL_SHA</td><td>20-22</td><td></td<>/tr tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td><td>20-22</td td><></td></tr<>tr class="deprecated"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td><td>20-22</td><td></td></tr tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td<>td>20-22</td td></td<<>>/tr tr><class="deprecated" ><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td<>td>20-22</td<>td></td></tr tr><class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td<>td>20-22</td><td></td></tr tr<>class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_256_ <CBC_SHA/td><td>20-22</td<>td></td></tr tr><class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</td<>td>20-22</td><td></td></tr tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384</td><td>20-22</Td><td></td></tr tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_NULL_SHA</td><td>20-22</td><td></td></tr><class="deprecated"<>td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td<>td>20-22</td><td></td/td<>/tr><class="deprecated" ><td>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</td<>td>20-22</td<>td></td></tr tr><class="deprecated"<>td>TLS_ECDH_anon_WITH_AES_128_CBC_SHA</td<>td>20-22</td><td></td></tr tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_AES_256_ <CBC_SHA/td><td>20-22</td><td></td<>/tr tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_NULL_SHA</td<>td>20-22</td><td></td></tr tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_RC4_128_SHA</td<>td>20-22</tdtd></td></tr><td<>>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td<>td>20+</td><td>20+</td<>/tr><tr<>td>TLS_FALLBACK_SCSV</td><td>21+</td<>td></td<>/tr tr><class="deprecated"><td ><><TLS_NULL_WITH_NULL_NULL/td><td>1-8</td><td></td></tr tr<>class="deprecated"><td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td><td>21-22</td td><></td<>/tr<>td><>TLS_PSK_WITH_AES_128_CBC_SHA</td<>td>21+</td><td>21+</td<>/tr tr><<>td>TLS_PSK_WITH_AES_256_CBC_SHA</td><td>21+</td<>td>21+</td></tr><class="deprecated"<>td>TLS_PSK_WITH_RC4_128_SHA</td<>td>21-25</td><td></td/td<>/tr tr>< class="deprecated">td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA</td<>td>1-8</td<>td>1-8</td></tr tr><class="deprecated"<>td>TLS_RSA_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td<>td>1-8</td<>/tr<>td TLS_RSA_WITH_AES_><><<128_CBC_SHA/td><td>9+</td><td>9+</td<>/tr tr<>class="deprecated"<>td>TLS_RSA_WITH_AES_128_CBC_SHA256</td><td>20-28</td<>td></td></tr><tr><td>TLS_RSA_WITH_AES_128_GCM_SHA256</td><td>20+</td><td>20+</td<>/tr tr>><<td>TLS_RSA_WITH_AES_256_CBC_SHA</td><td>9+</td<>td>20+</td></tr><class="deprecated"<>td>TLS_RSA_WITH_AES_256_CBC_SHA256</td<>td>20-28</td><td></td/td<>/tr><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</td<>td>20+</td><td>20+</td<>/tr tr><class="deprecated"><td>TLS_RSA_WITH_DES_CBC_SHA</td<>td>1-8</td<>td>1-8</td></tr tr<>class="deprecated"><td>TLS_RSA_WITH_NULL_MD5</Td><td>1-8</td><td></td></tr<>tr class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA</td<>td>1-8</td<>td></td></tr><class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA256</td<>td>20-22</td td></td<>></tr></tbody></Таблице>

<ПРИМЕЧАНИЕ.Em. Комплекты шифров PSK включены по умолчанию только в том случае, если SSLContext объект , с помощью которого был создан модуль, инициализирован с помощью PSKKeyManager.><>

Добавлено в версии 1.5.

Документация по Java для javax.net.ssl.SSLEngine.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

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

SSLEngine()

Конструктор для не SSLEngine предоставляет указаний для внутренней стратегии повторного использования сеанса.

SSLEngine(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

SSLEngine(String, Int32)

Конструктор для .SSLEngine

Свойства

ApplicationProtocol

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

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
DelegatedTask

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

EnableSessionCreation

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

Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
HandshakeApplicationProtocol

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

HandshakeApplicationProtocolSelector

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

HandshakeSession

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

HandshakeStatus

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

IsInboundDone

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

IsOutboundDone

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

JniIdentityHashCode

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
JniPeerMembers

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

NeedClientAuth

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

PeerHost

Возвращает имя узла однорангового узла.

PeerPort

Возвращает номер порта однорангового узла.

PeerReference

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
Session

Возвращает сеанс SSL для этого экземпляра подсистемы.

SSLParameters

Возвращает параметры SSLParameters, которые действуют для этого SSLEngine. -или- Применяет sslParameters к этому обработчику.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

UseClientMode

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

WantClientAuth

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

Методы

BeginHandshake()

Инициирует подтверждение (начальное или повторное согласование) в этой sslEngine.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
CloseInbound()

Сигнализирует о том, что в этот SSLEngineобъект больше не будут отправляться входящие сетевые данные.

CloseOutbound()

Сигнализирует о том, что исходящие данные приложения больше не будут отправляться в этот SSLEngine.

Dispose()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
Dispose(Boolean)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
GetEnabledCipherSuites()

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

GetEnabledProtocols()

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

GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
GetSupportedCipherSuites()

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

GetSupportedProtocols()

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

JavaFinalize()

Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .

(Унаследовано от Object)
Notify()

Пробуждение одного потока, ожидающего на мониторе этого объекта.

(Унаследовано от Object)
NotifyAll()

Активирует все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
SetEnabledCipherSuites(String[])

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

SetEnabledProtocols(String[])

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

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
ToArray<T>()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
Unwrap(ByteBuffer, ByteBuffer)

Пытается декодировать сетевые данные SSL/TLS в буфер данных приложения в виде открытого текста.

Unwrap(ByteBuffer, ByteBuffer[])

Пытается декодировать сетевые данные SSL/TLS в последовательность буферов данных приложения в виде открытого текста.

Unwrap(ByteBuffer, ByteBuffer[], Int32, Int32)

Пытается декодировать сетевые данные SSL/TLS в подсезону буферов данных приложения в виде открытого текста.

Wait()

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.

(Унаследовано от Object)
Wait(Int64)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)
Wrap(ByteBuffer, ByteBuffer)

Пытается закодировать буфер данных приложения в виде открытого текста в сетевые данные SSL/TLS.

Wrap(ByteBuffer[], ByteBuffer)

Пытается закодировать байты открытого текста из последовательности буферов данных в сетевые данные SSL/TLS.

Wrap(ByteBuffer[], Int32, Int32, ByteBuffer)

Пытается закодировать байты открытого текста из подсемпании буферов данных в сетевые данные SSL/TLS.

Явные реализации интерфейса

IJavaPeerable.Disposed()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.Finalized()

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенное средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

GetJniTypeName(IJavaPeerable)

Класс, который обеспечивает безопасный обмен данными с помощью таких протоколов, как ПРОТОКОЛ SSL или ПРОТОКОЛ TLS IETF RFC 2246 , но не зависит от транспорта.

Применяется к