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
- Наследование
- Атрибуты
Комментарии
Класс, который обеспечивает безопасную связь с помощью протоколов, таких как протокол 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 Socket
java.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()
исходящего или входящего данных соответственно. В зависимости от состояния вызова может использоваться данные приложения из исходного 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
реализации могут требовать результаты задач, которые могут занять длительный период времени, или даже блокировать. Например, Диспетчер доверия может потребоваться подключиться к удаленной службе проверки сертификатов, или 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()
используется для сигнала подсистеме, что приложение больше не будет отправлять данные.
Одноранговый элемент сигнализирует о своем намерении закрыть, отправив собственное сообщение подтверждения закрытия. После получения и обработки этого сообщения с помощью вызова локального SSLEngine
unwrap()
приложения приложение может обнаружить близкое, вызвав unwrap()
и найдя SSLEngineResult
состояние "CLOSED" или #isInboundDone()
возвращает значение true. Если по какой-то причине одноранговый узел закрывает связь, не отправляя соответствующее сообщение о закрытии SSL/TLS, приложение может обнаружить конец потока и сигнализировать подсистеме с помощью #closeInbound()
этого не будет больше входящих сообщений для обработки. В некоторых приложениях может потребоваться упорядоченное завершение работы сообщений из однорангового узла, в этом случае они могут проверить, что закрытие было создано сообщением подтверждения, а не условием завершения потока.
Существует две группы наборов шифров, о которых необходимо знать при управлении наборами шифров:
<Наборы шифров UL><LI><em>поддерживаются< или эм> : все наборы, поддерживаемые реализацией SSL. Этот список сообщается с помощью #getSupportedCipherSuites()
.
<Наборы шифров li><em>включено< или em> , что может быть меньше, чем полный набор поддерживаемых наборов. Эта группа устанавливается с помощью #setEnabledCipherSuites(String [])
метода и запрашивается с помощью #getEnabledCipherSuites()
метода. Изначально набор наборов шифров по умолчанию будет включен на новом подсистеме, представляющей минимальную рекомендуемую конфигурацию. </УЛ>
Для реализации по умолчанию требуется только наборы шифров, которые проверяют подлинность серверов и предоставляют конфиденциальность по умолчанию. Только если обе стороны явным образом согласны с неавторентированными и (или) незашифрованными (незашифрованными) обмен данными, будет выбран такой набор шифров.
Каждое подключение SSL/TLS должно иметь один клиент и один сервер, поэтому каждая конечная точка должна решить, какую роль следует предполагать. Этот выбор определяет, кто начинает процесс подтверждения, а также тип сообщений, которые должны отправляться каждой стороной. #setUseClientMode(boolean)
Метод настраивает режим. После начала SSLEngine
первоначального подтверждения невозможно переключаться между режимами клиента и сервера, даже при выполнении повторных переговоров.
Приложения могут обрабатывать делегированные задачи в разных потоках. При создании текущее SSLEngine
java.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(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
SSLEngine(String, Int32) |
Конструктор для |
Свойства
ApplicationProtocol |
Возвращает последнее значение протокола приложения, согласованное для этого подключения. |
Class |
Возвращает класс среды выполнения этого |
DelegatedTask |
Возвращает задачу делегата для этого экземпляра подсистемы. |
EnableSessionCreation |
Возвращает, могут ли новые сеансы SSL быть установлены этим механизмом. |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
HandshakeApplicationProtocol |
Возвращает значение протокола приложения, согласованное с подтверждением SSL/TLS в настоящее время. |
HandshakeApplicationProtocolSelector |
Извлекает функцию обратного вызова, которая выбирает значение протокола приложения во время подтверждения SSL/TLS. -или- Регистрирует функцию обратного вызова, которая выбирает значение протокола приложения для подтверждения SSL/TLS. |
HandshakeSession |
Возвращает созданное |
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() |
Сигнализирует о том, что больше входящих сетевых данных не будет отправлено в это |
CloseOutbound() |
Сигнализирует о том, что больше исходящих данных приложения не будут отправляться по этому |
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() |
Возвращает имена версий протокола, которые в настоящее время включены для использования с этим |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
GetSupportedCipherSuites() |
Возвращает имена наборов шифров, которые можно включить для использования в этом обработчике. |
GetSupportedProtocols() |
Возвращает имена протоколов, которые можно включить для использования с этим |
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), но является независимым от транспорта. |