Поделиться через


SSLEngine Класс

Определение

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

[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 или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

Режимы безопасного взаимодействия включают: <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.net.Socket Socketjava.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling)java.nio.channels.Selector selectable non-blocking I/O, и традиционных входных и выходных потоков, локальных 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> — SSLEngine создано и инициализировано, но еще не было использовано. На этом этапе приложение может задать какие-либо SSLEngineпараметры (включенные наборы шифров, следует ли SSLEngine подтверждение в клиентском или серверном режиме и т. д.). После начала подтверждения все новые параметры (кроме режима клиента или сервера, см. ниже) будут использоваться для следующего подтверждения.

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

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

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

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

Данные перемещаются через подсистему путем вызова #wrap(ByteBuffer, ByteBuffer) wrap() или #unwrap(ByteBuffer, ByteBuffer) unwrap() исходящего или входящего данных соответственно. В зависимости от состояния вызова может использоваться данные приложения из исходного SSLEnginewrap() буфера и могут создаваться сетевые данные в целевом буфере. Исходящие данные могут содержать данные приложения и (или) подтверждения. Вызов 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 реализации могут требовать результаты задач, которые могут занять длительный период времени, или даже блокировать. Например, Диспетчер доверия может потребоваться подключиться к удаленной службе проверки сертификатов, или keyManager может потребоваться предложить пользователю определить, какой сертификат будет использоваться в рамках проверки подлинности клиента. Кроме того, создание криптографических подписей и проверка их может быть медленной, казалось бы, блокировкой.

Для любой java.lang.Runnable операции, которая потенциально может блокироваться, SSLEngine будет создана делегированная задача. Если 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>поддерживаются< или эм> : все наборы, поддерживаемые реализацией SSL. Этот список сообщается с помощью #getSupportedCipherSuites().

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

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

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

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

<Отдел кадров>

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

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

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

Например:

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

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

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

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

<style type="text/css"> tr.deprecated { фон-цвет: #ccc; цвет: #999; стиль шрифта: курсив; }</стиль>

<h4>Protocols</h4><table><thead><tr th><Protocol</><>th 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 td><>1– 22</td<>/tr tr><<>td TLSv1</><>td td>1+</>><td td 1+</td/><<>tr tr<>td>TLSv1.1</td td 20+</td<>>><td>20+</td<>/tr><tr><td TLSv1.2</>><td td>20+</><>td td 20+</td/td<>/tr<>><td>TLSv1.3</td><td>29+/td td><29+<</td<>>/tr<>/tbody></table>

<h4>Cipher suite</h4><table><thead><tr<>th Cipher suite</<>>th th>Supported (API Levels)/>><th th Enabled by default (API Levels)<</<>th/tr></thead><tbody><tr class=">><ded>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</><td td>9-22</td><9-19</td></tr/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 d9-22<<>>/td<>td 9-19</td<>/tr<>class="deprecated"><td>>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td>9-22</td td td><>9-19</td/tr<>class="ded"><td><> SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</<>td td>9-22</td<>td>9-19</td/td<>/tr><class="deprecated"<>td SSL_DHE_RSA_WITH_DES_CBC_SHA</td td><>>9-22</<>>td 9-19</td<>/tr<>class="deprecated"><td>SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</<>td td>9-22</td<>td/td></<>><tr class="deprecated"td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5/><>td td 9-22/>><<td td/td/<>td/tr><class="deprecated>"<><>td SSL_DH_anon_WITH_3DES_EDE_CBC_SHA<</>><td td 9-22<</td><td></td/tr><class="deprecated"<>td>>< SSL_DH_anon_WITH_DES_CBC_SHA</>><td td 9-22</<>td td></<<>>tr class="deprecated"td>SSL_DH_anon_WITH_RC4_128_MD5</<>>td td 9-22</<><>td td/td/td/><tr><class="deprecated"<>td"><td SSL_RSA_EXPORT_><WITH_DES40_CBC_SHA/td><td>9-22</td td<>>9-19</td/>><<tr class="deprecated"<>td>SSL_RSA_EXPORT_WITH_RC4_40_MD5/><>td td 9-22</><>td td 9-19/<>td/tr<><>>td SSL_RSA_WITH_3DES_EDE_CBC_SHA<</>><td td 9+</td>><td 9-19<</td></tr>class="deprecated"<>td SSL_RSA_WITH_DES_CBC_SHA</td td><>>9-22</<>>td 9-19</<>td/<>tr class="deprecated"td>SSL_RSA_WITH_NULL_MD5</<>>td td 9-22</><><td td/<>tr<>class="deprecated"<><>td"td>< SSL_RSA_WITH_NULL_SHA/td><<td 9-22</td><td/td<><>/tr><class="<>>ded>SSL_RSA_WITH_RC4_128_MD5</><>td td 9-25</>><td td 9-19</<>td/tr<>class="><>de"de"td SSL_RSA_WITH_RC4_128_SHA</><>td 9-25</td td 9-23/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/td></tr>><><td TLS_CHACHA20_POLY1305_SHA256</<>td td>29+</<>>td td 29+/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 class="deprecated"td TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</><>td>td 1-8/><>td td 1-8<</td/td></tr><class="deprecated"<>><td"td TLS_DHE_DSS_WITH_AES_128_><<CBC_SHA/td><td>9-22</td td><>9-22</><td/><tr class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256/td td 20-22/<>><td td/><tr><class="нерекомендуемый"<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256<</<<>>>>td td 20-22<</td td td><></td></tr><class="deprecated"><td TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td<>>td>9-22</>><td 20-22</><td/><tr class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</<>>td td 20-22</>><<td td/<>tr tr><class="deprecated"td"><td TLS_DHE_DSS_WITH_><AES_256_GCM_SHA384/><td td>20-22</td td<>/td></<>tr><class="deprecated"><td>TLS_DHE_DSS_WITH_DES_CBC_SHA/>><td td 1-8</<>>td td 1-8</td/td<>/tr><class="<>>de"td TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA<</>><td td 1-8</td td td><>1-8</td/tr><class="<>ded"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 9-25<</<>>td/td></tr><class="><deprecated" ><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</<>td td>20-25</td><td/td></><tr<>class="deprecated"td>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256/><>td td 20-25/td td 20-25<</>><><td/tr<>class="deprecated"<><>td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA<</td><td>9-25/td td><>20-25<</td></tr<>class="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256/>><td td 20-25</<><>td td/td/<>td/tr<>class="<>ded>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384<</<>>td td 20-25/td td 20-25/td td 20-25<</td><>/tr><class="deprecated"<>td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td td><>1-8</><>td 1-8</td/<><>tr class="deprecated"td TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</<>>td>td 1-8</><><td/><tr<>class="deprecated"<<>>td TLS_DH_DSS_>><<WITH_3DES_EDE_CBC_SHA/><td td>1-8</td<>td/td></>><<tr class="deprecated"td>TLS_DH_DSS_WITH_DES_CBC_SHA/><>td td 1-8/>><><<td/tr<>class="deprecated>">><<td TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA<</>><td td 1-8<</><><td td/></tr><class="deprecated"<>td TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td><>td>1-8</><td td></td/<<>>tr class="deprecated"td>TLS_DH_RSA_WITH_DES_CBC_SHA</<>>td td 1-8</<><>td td/><tr<>class="deprecated"<>><td TLS_DH_anon_EXPORT_WITH_><DES40_CBC_SHA/<>td td>td 1-8</td<>/td/td><<>/tr><class="deprecated"<>td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA/>><td td 1-8</><><><td/tr<>class="deprecated>"><td TLS_DH_anon_WITH_AES_128_CBC_SHA<</><>td td 9-22</<>><td td/></tr><tr class="deprecated"td TLS_DH_anon_WITH_AES_128_CBC_SHA256/td><td>20-22</<>td td></>><<tr class="deprecated"<>td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</>><td td 20-22</td><>< td/><tr<>class="deprecated"><><td>TLS_DH_anon_WITH_AES_256_CBC_SHA/<<> td td>9-22</td<>td></td></tr<>class="deprecated"><td>TLS_DH_anon_WITH_AES_256_CBC_SHA256/>><td td 20-22/><><td td/><<>tr class="><ded>TLS_DH_anon_WITH_AES_256_GCM_SHA384<</>><td td 20-22<</<<>>><td td/tr><><tr class="deprecated"td>TLS_DH_anon_WITH_DES_CBC_SHA</td<>td>1-8</<>td td></td/td/<>><tr tr class="deprecated"<<>>td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA/<>>td td 20-22</><><<>td td/tr tr<>><>td TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA<</tdtd 20+</td><td 20+</td><>/tr><class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</<>>td td 20-28</><><td/><tr<>><>td TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</>><td td 20+/>><td td 20+<</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/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><class="deprecated>"><td TLS_ECDHE_ECDSA_WITH_NULL_SHA</<>>td td 20-22</td td/ td/>><<>< td/tr<>class="deprecated<>"<>td TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</<>>td td>20-25</><>td 20-23</td<>/<<>>tr tr td>TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA</<>>td td 21+/><>td td 21+<</td/td/td<>/tr tr><><td><TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA/<>td td>21+/td td<>>21+<</td/><td>><<>/tr td TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256</<>td td>24+/<>>td td 24+<</td<>/tr<>class="deprecated"<>td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</tdtd 20-22</td><td/td/td/tr><<>>td><>< TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</<>>td td 20+</<>td td>20+</td></tr><class="deprecated"><td TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</<>>td>td 20-28</td td td><><>></td></tr><<>td td>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256/td><td>20+/>><td td 20+<</<>td/<>>><tr tr td TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA<</<>>td td 20+/td td 20+<</>><td/td></tr<>class="deprecated"><td TLS_><ECDHE_RSA_WITH_AES_256_CBC_SHA384/<>td 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 td24+</td><td td>24+</td></tr><class="deprecated"<>td>TLS_ECDHE_RSA_WITH_NULL_SHA</><>td td 20-22</><><td td/td/<>tr<>class="deprecated"><>td TLS_ECDHE_RSA_WITH_RC4_128_SHA</><>td td 20-25</<>>td 20-23</td/tr><class="deprecated"<>td TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td td<>>>20-22</<>td td></td/td/td/><<>tr tr class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</>><td td 20-22</><<>td/td/td/td/><tr tr><class=">< нерекомендуемый"><td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</<>td td>20-22</<>><td/<<>>tr class="deprecated"td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</<>>td td 20-22</><>><<td/tr<>class="deprecated"<>><td"td TLS_ECDH_><ECDSA_WITH_AES_256_CBC_SHA/><td td>20-22</td<>td/td></><<>tr class="deprecated"td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384/>><td td 20-22</><><td td/td/><td/tr<>class="deprecated">><<td TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384<</td>><>td 20-22</td<>td/td><<>/tr<>class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_NULL_SHA/>><td td 20-22/><><td td/td/<>td/tr><class="><ded>TLS_ECDH_ECDSA_WITH_RC4_128_SHA<</>><td td 20-22<</td><>< td//tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td td>><20-22</><td td></td/td/td/>><<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 class="deprecated"td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td td 20-22</><<>td td/>><td/td/><tr<>class="deprecated"<<>>td TLS_ECDH_RSA_WITH_AES_256_>><<CBC_SHA/><td td>20-22</td<>td/td></<>><tr class="deprecated"td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384/>><td td 20-22</>><<td td/td/><tr><class="deprecated>"><<>td TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384<</><>td td 20-222</td><td/td/tr>class="deprecated><"><td><> TLS_ECDH_RSA_WITH_NULL_SHA</>><td td 20-22</<>td td></td/td/>><<tr class="deprecated"td TLS_ECDH_RSA_WITH_RC4_128_SHA</<>>td>td 20-22</><><td td/td/<>tr<>class="<>deprecated"<><td>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</td<>td>20-22</td<>td></td/><tr<>class="deprecated"td>TLS_ECDH_anon_WITH_AES_128_CBC_SHA/td td 20-22</><><td td/>><td/<>tr<>class="deprecated"<<>>td TLS_ECDH_anon_WITH_AES_256_<><CBC_SHA/><td td>20-22</td><td/td></<<>>tr class="deprecated"td>TLS_ECDH_anon_WITH_NULL_SHA/>><td td 20-22/<><>td td/td/><td/tr><class="deprecated>"<><>td TLS_ECDH_anon_WITH_RC4_128_SHA<</><>td td 20-22<</td><><td/td></tr 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<>/tr<>class="deprecated"td"><td><TLS_NULL_WITH_NULL_NULL/<>td td>1-8</td<>td/td></<>tr><class="deprecated"><td>TLS_PSK_WITH_3DES_EDE_CBC_SHA/<>>td td 21-22</><<>td 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<>/tr tr>< class="deprecated">td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA</td td<>>1-8</><>td td 1-8</td/><<>tr class="deprecated"<>td>TLS_RSA_WITH_3DES_EDE_CBC_SHA</>><td td 1-8/><>td td 1-8<</td/td></tr tr><><td TLS_RSA_WITH_AES_><<128_CBC_SHA/td<>td>9+/td<>td>9+<</td></><tr class="deprecated"><td>TLS_RSA_WITH_AES_128_CBC_SHA256/><>td td 20-28</<>><td td/td/<>td/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<>/tr tr><><td>TLS_RSA_WITH_AES_256_GCM_SHA384</<>td td>20+/td><>td 20+<</<>td/<>tr class="deprecated"td>TLS_RSA_WITH_DES_CBC_SHA</<>>td td 1-8</>><td td 1-8</td<>/tr<>class="deprecated"<>><td TLS_RSA_WITH_NULL_MD5></td><td 1-8/td<>td/td<><>/tr<>class="><ded>"td TLS_RSA_WITH_NULL_SHA</><>td td 1-8</<>><td td/td/><tr<>class="><>ded"td TLS_RSA_WITH_NULL_SHA256</>><td 20-22</<>><td td/td></tr><></tbody></стол>

<em NOTE</em>>: наборы шифров PSK включены по умолчанию только в том случае, если SSLContext модуль был инициализирован с помощью .PSKKeyManager

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

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

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

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

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 или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

NeedClientAuth

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

PeerHost

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

PeerPort

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

PeerReference

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

(Унаследовано от 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 или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

(Унаследовано от 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 или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

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

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

(Унаследовано от 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 или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

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

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

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

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

Wrap(ByteBuffer[], ByteBuffer)

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

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

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

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

IJavaPeerable.Disposed()

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

GetJniTypeName(IJavaPeerable)

Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол SSL или IETF RFC 2246 "Transport Layer Security" (TLS), но является независимым от транспорта.

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