Freigeben über


SSLEngine Klasse

Definition

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

[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
Vererbung
SSLEngine
Attribute

Hinweise

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

Zu den Modi für sichere Kommunikation gehören: <UL>

<LI><em>Integrity Protection</em>. SSL/TLS schützt vor Änderungen von Nachrichten durch einen aktiven Wiretapper.

<LI><em>Authentication</em>. In den meisten Modi stellt SSL/TLS die Peerauthentifizierung bereit. Server werden in der Regel authentifiziert, und Clients können wie von Servern angefordert authentifiziert werden.

<LI><em>Vertraulichkeit (Datenschutz)</em>. In den meisten Modi verschlüsselt SSL/TLS Daten, die zwischen Client und Server gesendet werden. Dadurch wird die Vertraulichkeit von Daten geschützt, sodass passive Verkabelungen keine vertraulichen Daten wie Finanzinformationen oder persönliche Informationen vieler Art sehen.

</UL>

Diese Schutzarten werden durch eine "Verschlüsselungssuite" angegeben, bei der es sich um eine Kombination aus kryptografischen Algorithmen handelt, die von einer bestimmten SSL-Verbindung verwendet werden. Während des Aushandlungsprozesses müssen sich die beiden Endpunkte auf eine Verschlüsselungssuite einigen, die in beiden Umgebungen verfügbar ist. Wenn keine solche Suite gemeinsam ist, kann keine SSL-Verbindung hergestellt werden, und keine Daten können ausgetauscht werden.

Die verwendete Chiffresuite wird durch einen Verhandlungsprozess namens "Handshaking" hergestellt. Das Ziel dieses Prozesses besteht darin, eine "Sitzung" zu erstellen oder erneut anzumelden, die viele Verbindungen im Laufe der Zeit schützen kann. Nachdem der Handshaking abgeschlossen ist, können Sie mithilfe der #getSession() Methode auf Sitzungsattribute zugreifen.

Die SSLSocket Klasse bietet einen Großteil der gleichen Sicherheitsfunktionen, aber alle eingehenden und ausgehenden Daten werden automatisch mit dem zugrunde liegenden java.net.Socket Sockettransportiert, was vom Entwurf aus ein Blockierungsmodell verwendet wird. Obwohl dies für viele Anwendungen geeignet ist, bietet dieses Modell nicht die Skalierbarkeit, die von großen Servern benötigt wird.

Der Hauptunterschied besteht SSLEngine darin, dass sie unabhängig vom Transportmechanismus auf eingehenden und ausgehenden Bytestreams arbeitet. Es liegt in der Verantwortung des SSLEngine Benutzers, einen zuverlässigen E/A-Transport an den Peer zu organisieren. Durch die Trennung der SSL/TLS-Abstraktion vom E/A-Transportmechanismus können sie SSLEngine für eine Vielzahl von E/A-Typen verwendet werden, zjava.nio.channels.spi.AbstractSelectableChannel#configureBlocking(boolean) non-blocking I/O (polling). B. , java.nio.channels.Selector selectable non-blocking I/Ojava.net.Socket Socket und die herkömmlichen Input/OutputStreams, lokale java.nio.ByteBuffer ByteBuffers oder Bytearrays, zukünftige asynchrone E/A-Modelle usw.

Auf hoher Ebene erscheint das SSLEngine so:

app data

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

                              net data

Anwendungsdaten (auch als Klartext oder Klartext bezeichnet) sind Daten, die von einer Anwendung erzeugt oder genutzt werden. Das Gegenstück ist Netzwerkdaten, die entweder aus Handshaking- und/oder Chiffretextdaten (verschlüsselt) bestehen und dazu bestimmt sind, über einen E/A-Mechanismus transportiert zu werden. Eingehende Daten sind Daten, die vom Peer empfangen wurden, und ausgehende Daten sind für den Peer bestimmt.

(Im Kontext eines SSLEngine, der Begriff "Handshake-Daten" wird verwendet, um alle ausgetauschten Daten zu bedeuten, um eine sichere Verbindung herzustellen und zu kontrollieren. Handshake-Daten enthalten die SSL/TLS-Nachrichten "alert", "change_cipher_spec" und "handshake".)

Es gibt fünf verschiedene Phasen zu einem SSLEngine.

<OL><li> Creation - Die SSLEngine wurde erstellt und initialisiert, wurde aber noch nicht verwendet. In dieser Phase kann eine Anwendung alle SSLEngine-spezifischen Einstellungen (aktivierte Verschlüsselungssammlungen, ob der SSLEngine Handshake im Client- oder Servermodus usw.) festlegen. Sobald der Handshaking begonnen hat, werden jedoch alle neuen Einstellungen (mit Ausnahme des Client-/Servermodus, siehe unten) für den nächsten Handshake verwendet.

<li> Initial Handshake - Der anfängliche Handshake ist ein Verfahren, mit dem die beiden Peers Kommunikationsparameter austauschen, bis eine SSLSession eingerichtet wird. Anwendungsdaten können während dieser Phase nicht gesendet werden.

<li> Anwendungsdaten - Sobald die Kommunikationsparameter eingerichtet wurden und der Handshake abgeschlossen ist, können Anwendungsdaten durch die SSLEngine. Ausgehende Anwendungsnachrichten sind verschlüsselt und integritätsgeschützt, und eingehende Nachrichten umkehren den Prozess.

<li> Rehandshaking - Beide Seiten können jederzeit während der Anwendungsdatenphase eine Neuverhandlung der Sitzung anfordern. Neue Handshaking-Daten können zwischen den Anwendungsdaten gemischt werden. Bevor Sie die Rehandshake-Phase starten, setzt die Anwendung möglicherweise die SSL/TLS-Kommunikationsparameter zurück, z. B. die Liste der aktivierten Verschlüsselungssuiten und die Verwendung der Clientauthentifizierung, kann sich jedoch nicht zwischen Client-/Servermodi ändern. Wie zuvor, sobald der Handshaking begonnen hat, werden alle neuen SSLEngine Konfigurationseinstellungen erst verwendet, wenn der nächste Handshake.

<li> Schließen – Wenn die Verbindung nicht mehr benötigt wird, sollte die Anwendung die SSLEngine verbleibenden Nachrichten an den Peer senden/empfangen, bevor Sie den zugrunde liegenden Transportmechanismus schließen. Sobald ein Modul geschlossen wurde, ist es nicht wiederverwendbar: Ein neues SSLEngine muss erstellt werden. </OL> An SSLEngine wird durch Aufrufen SSLContext#createSSLEngine() von einer initialisierten SSLContext. Alle Konfigurationsparameter sollten festgelegt werden, bevor Sie den ersten Aufruf an wrap(), , unwrap()oder beginHandshake(). Diese Methoden lösen den ersten Handshake aus.

Daten werden durch das Modul verschoben, indem sie ausgehende oder eingehende Daten aufrufen bzw. eingehende Daten aufrufen #wrap(ByteBuffer, ByteBuffer) wrap()#unwrap(ByteBuffer, ByteBuffer) unwrap() . Abhängig vom Status des SSLEngineAufrufs kann ein wrap() Aufruf Anwendungsdaten aus dem Quellpuffer nutzen und netzwerkdaten im Zielpuffer erzeugen. Die ausgehenden Daten können Anwendungs- und/oder Handshakedaten enthalten. Ein Aufruf zum unwrap() Untersuchen des Quellpuffers und kann den Handshake voranschreiten, wenn die Daten Handshaking-Informationen sind, oder Anwendungsdaten im Zielpuffer platzieren, wenn die Daten Anwendung sind. Der Zustand des zugrunde liegenden SSL/TLS-Algorithmus bestimmt, wann Daten verbraucht und produziert werden.

Aufrufe und wrap()unwrap() Rückgabe einer SSLEngineResult , die den Status des Vorgangs angibt, und (optional) wie mit dem Modul interagieren, um fortschritte zu machen.

Die SSLEngine erzeugt/verbraucht nur vollständige SSL/TLS-Pakete und speichert keine Anwendungsdaten intern zwischen Aufrufen.wrap()/unwrap() Daher müssen Eingabe- und Ausgabewerte ByteBufferentsprechend angepasst werden, um den maximal erzeugten Datensatz zu halten. Aufrufe an SSLSession#getPacketBufferSize() und SSLSession#getApplicationBufferSize() sollten verwendet werden, um die entsprechenden Puffergrößen zu ermitteln. Die Größe des ausgehenden Anwendungsdatenpuffers spielt in der Regel keine Rolle. Wenn Pufferbedingungen den ordnungsgemäßen Verbrauch/die Ordnungsgemäße Produktion von Daten nicht zulassen, muss die Anwendung das Problem (via SSLEngineResult) ermitteln und das Problem beheben, und versuchen Sie es dann erneut.

Gibt beispielsweise ein SSLEngineResult.Status#BUFFER_OVERFLOW Ergebnis zurück, wenn das Modul feststellt, unwrap() dass nicht genügend Zielpuffer verfügbar ist. Anwendungen sollten diesen Wert aufrufen SSLSession#getApplicationBufferSize() und mit dem im Zielpuffer verfügbaren Speicherplatz vergleichen und den Puffer bei Bedarf vergrößern. unwrap() Wenn eine SSLEngineResult.Status#BUFFER_UNDERFLOWAnwendung zurückgegeben werden soll, sollte die Anwendung auch aufrufenSSLSession#getPacketBufferSize(), um sicherzustellen, dass der Quellpuffer genügend Platz zum Halten eines Datensatzes (Enlarging bei Bedarf) hat und dann eingehendere Daten abruft.

{@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.
              }
            }

Im Gegensatz dazu SSLSocketsind alle Methoden von SSLEngine nicht blockierend. SSLEngine Implementierungen erfordern möglicherweise die Ergebnisse von Vorgängen, die einen längeren Zeitraum bis zum Abschluss dauern oder sogar blockieren können. Beispielsweise muss ein TrustManager möglicherweise eine Verbindung mit einem Remotezertifikatüberprüfungsdienst herstellen, oder ein KeyManager muss einen Benutzer auffordern, zu bestimmen, welches Zertifikat als Teil der Clientauthentifizierung verwendet werden soll. Darüber hinaus können das Erstellen kryptografischer Signaturen und die Überprüfung dieser Signaturen langsam und scheinbar blockiert werden.

Für jeden Vorgang, der SSLEngine potenziell blockiert werden kann, wird eine java.lang.Runnable delegierte Aufgabe erstellt. Wenn SSLEngineResult angegeben wird, dass ein delegiertes Aufgabenergebnis erforderlich ist, muss die Anwendung aufrufen #getDelegatedTask() , um eine ausstehende delegierte Aufgabe abzurufen und ihre java.lang.Runnable#run() run() Methode aufzurufen (möglicherweise einen anderen Thread abhängig von der Berechnungsstrategie). Die Anwendung sollte das Abrufen delegierter Aufgaben fortsetzen, bis es nicht mehr vorhanden ist, und versuchen Sie den ursprünglichen Vorgang erneut.

Am Ende einer Kommunikationssitzung sollten Anwendungen die SSL/TLS-Verbindung ordnungsgemäß schließen. Die SSL/TLS-Protokolle verfügen über schließende Handshakenachrichten, und diese Nachrichten sollten an den Peer übermittelt werden, bevor sie den SSLEngine zugrunde liegenden Transportmechanismus freigeben und schließen. Eine Schließung kann von einer von: einer SSLException, einer eingehenden Schließen-Handshake-Nachricht oder einer der close-Methoden initiiert werden. In allen Fällen werden schließende Handshake-Nachrichten vom Modul generiert und wrap() sollten wiederholt aufgerufen werden, bis der resultierende SSLEngineResultStatus "GESCHLOSSEN" zurückgibt oder #isOutboundDone() "true" zurückgibt. Alle aus der wrap() Methode abgerufenen Daten sollten an den Peer gesendet werden.

#closeOutbound() wird verwendet, um dem Modul zu signalisieren, dass die Anwendung keine weiteren Daten sendet.

Ein Peer signalisiert seine Absicht, durch Senden einer eigenen Schließen-Handshake-Nachricht zu schließen. Nachdem diese Nachricht vom lokalen SSLEngineunwrap() Aufruf empfangen und verarbeitet wurde, kann die Anwendung den Schließen erkennen, indem sie den Status "GESCHLOSSEN" aufruft unwrap() und suchtSSLEngineResult, oder wenn #isInboundDone() "true" zurückgegeben wird. Wenn der Peer den Kommunikationslink aus irgendeinem Grund schließt, ohne die richtige SSL/TLS-Schließungsnachricht zu senden, kann die Anwendung das Ende des Datenstroms erkennen und das Modul darüber #closeInbound() signalisieren, dass eingehende Nachrichten nicht mehr verarbeitet werden. Einige Anwendungen können das geordnete Herunterfahren von Nachrichten von einem Peer erfordern. In diesem Fall können sie überprüfen, ob die Schließung durch eine Handshake-Nachricht und nicht durch eine End-of-Stream-Bedingung generiert wurde.

Es gibt zwei Gruppen von Verschlüsselungssammlungen, die Sie beim Verwalten von Verschlüsselungssammlungen wissen müssen:

<UL><LI><em>Supported</em> cipher suites: alle Suites, die von der SSL-Implementierung unterstützt werden. Diese Liste wird mithilfe von #getSupportedCipherSuites().

<LI><em>Enabled</em> cipher suites, die möglicherweise weniger als der vollständige Satz unterstützter Suites sein können. Diese Gruppe wird mithilfe der #setEnabledCipherSuites(String []) Methode festgelegt und mit der #getEnabledCipherSuites() Methode abgefragt. Zunächst wird ein Standardsatz von Chiffresammlungen auf einem neuen Modul aktiviert, das die minimale vorgeschlagene Konfiguration darstellt. </UL>

Implementierungsstandardwerte erfordern, dass nur Verschlüsselungssammlungen, die Server authentifizieren und Vertraulichkeit bereitstellen, standardmäßig aktiviert werden. Nur wenn beide Seiten ausdrücklich der nicht authentifizierten und/oder nicht privaten (unverschlüsselten) Kommunikation zustimmen, wird eine solche Verschlüsselungssuite ausgewählt.

Jede SSL/TLS-Verbindung muss über einen Client und einen Server verfügen, daher muss jeder Endpunkt entscheiden, welche Rolle angenommen werden soll. Diese Auswahl bestimmt, wer mit dem Handshaking-Prozess beginnt und welche Art von Nachrichten von jeder Partei gesendet werden soll. Die Methode #setUseClientMode(boolean) konfiguriert den Modus. Nachdem der anfängliche Handshaking gestartet wurde, kann ein SSLEngine Wechsel zwischen Client- und Servermodi auch bei Neuverhandlungen nicht möglich sein.

Anwendungen können delegierte Aufgaben in verschiedenen Threads verarbeiten. Wenn ein SSLEngine Element erstellt wird, wird der aktuelle java.security.AccessControlContext Gespeichert. Alle zukünftigen delegierten Aufgaben werden mithilfe dieses Kontexts verarbeitet: d. h., alle Zugriffssteuerungsentscheidungen werden mithilfe des kontexts, der bei der Modulerstellung erfasst wird, getroffen.

<Personalverwaltung>

<B>Parallelitätshinweise</B>: Es gibt zwei Parallelitätsprobleme, die Sie beachten müssen:

<OL><li>Die wrap() Und unwrap() Methoden können gleichzeitig voneinander ausgeführt werden.

<li> Die SSL/TLS-Protokolle verwenden sortierte Pakete. Anwendungen müssen sicherstellen, dass generierte Pakete sequenziert werden. Wenn Pakete außerhalb der Reihenfolge ankommen, können unerwartete oder tödliche Ergebnisse auftreten.

Zum Beispiel:

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

Als Korollary dürfen zwei Threads nicht versuchen, die gleiche Methode (entweder wrap() oder unwrap()) gleichzeitig aufzurufen, da es keine Möglichkeit gibt, die spätere Paketbestellung zu garantieren. </OL>

<h3>Standardkonfiguration für verschiedene Android-Versionen</h3>

SSLEngine Von der Standardeinstellung SSLContext abgerufene Instanzen werden wie folgt konfiguriert:

<style type="text/css"> tr.deprecated { background-color: #ccc; color: #999; font-style: kursiv; }</Stil>

<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><>1– 22</td></tr td>><><TLSv1</td td><>1+</td td>><1+</td<>/tr t><<>td>TLSv1.1</td td td>><20+</td td>><20+</td<>/tr<>td><>TLSv1.2</td td>><20+</td<>td>20+</td<>/tr<>><t td>TLSv1.3</Td><td>29+</td<>td>29+</td></tr<>/tbody></table>

<h4>Cipher suites</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="deprecated"><td>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td td>><9-22</td td<>>9-19</td></tr><tr class="veraltet"><td SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td><td>9-22</td td>><9-19</td<>/tr><class="deprecated"td>SSL_DHE_DSS_WITH_DES_CBC_SHA><</td<>td>9-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="deprecated"<>td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td td>><9-22</td td>><9-19</td></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></td<>/tr<>class="deprecated"<>td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td><td>9-22</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 td/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 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 tr><><td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td 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 class><="deprecated"><td>SSL_RSA_WITH_NULL_MD5</td td<>>9-22</td<>td/td/td/td><<>/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><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><<>t td><> TLS_AES_256_GCM_SHA384</td td<>td>29+</td><td>29+</td></tr<><>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><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<>class="deprecated"><td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</td<>td>20-22</td td td><></td></tr><class="deprecated"<>td>TLS_DHE_DSS_WITH_AES_128_GCM_SHA256</td><td>20-22</td><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 class><="deprecated"><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</td<>td>20-22</td<>td td/td/td/td><<>/tr class><="deprecated"><td TLS_DHE_DSS_WITH_><<AES_256_GCM_SHA384/td><td>20-22</td<>td td></td></tr<>class="deprecated"><td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td<>td>1-8</td><td>1-8</td></tr class><="deprecated"><td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td><td td>1-8</td><td td>1-8</td></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/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/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="deprecated"><td>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</td td>><20-25</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><class="deprecated"<>td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td<>td>1-8</td td td/td td><<>/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 td></td<>/tr><class="deprecated"<>td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td td<>>1-8</td><td/td td/td></tr tr><class="deprecated"><td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td td<>>1-8</td td td></td><>< tr><class="deprecated"><td>TLS_DH_RSA_WITH_DES_CBC_SHA</td><td>1-8</td<>td/td/td/td><<>/tr class><="deprecated"><td TLS_DH_anon_EXPORT_WITH_>><<DES40_CBC_SHA/td<>td>1-8</td<>td/td><<>/tr<>class="deprecated"><td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td><td>1-8</td td><<>/td></tr><class="deprecated"><td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td><td>9-22</td td td/td><><></Tr><tr class="deprecated">td>TLS_DH_anon_WITH_AES_128_CBC_SHA256</td><td>20-22</td td td/td td<><<><>> class="deprecated"<>td>TLS_DH_anon_WITH_AES_128_GCM_SHA256</td<>td>20-22</td><td td/td/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 td<>></td<>/tr<>class="deprecated"<>td>TLS_DH_anon_WITH_AES_256_GCM_SHA384</td<>td>20-22</td><td/td/td<><>/tr><><tr class="deprecated"><td>TLS_DH_anon_WITH_DES_CBC_SHA</td><td>1-8</td<>td td/td/td>><< tr<>class="deprecated"><td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td<>td>20-22</td<>td/td/td></tr td>>><<< TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA/td td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td><td>20+</td><td>20+</td<>/tr<>class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td<>td>20-28</td td td><></td<>/tr><><td>TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256</td<>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 class="deprecated"<>td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td<>td>20-28</td td></td></td<>/tr>><<t<>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/>><<>< td></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<>/tr 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 td>24+</td><td>24+</td<>/tr<>class="deprecated"<>td TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</td>td 20-22</td><td></td<>/tr><<>td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td 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<>>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</td><td>20+</td td<>>20+</td/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 td>20+</td<>td>20+</td<>/tr><><td>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</td td td><td>24+</td td><>24+</td<>/tr class><="deprecated"><td>TLS_ECDHE_RSA_WITH_NULL_SHA</td><td>20-22</td td><td/td<>>><<="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></td><></tr><class="deprecated"><td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td><td>20-22</td td td/td><></td/td></tr tr><class=">< veraltet">td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td><td>20-22</td><td/td/td><>< tr><class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256</td<>td>22</td><td/td/td><<>/tr<>class="deprecated"><td TLS_ECDH_><<ECDSA_WITH_AES_256_CBC_SHA/td><td>20-22</td<>td td/td><></tr<>class="deprecated"<>td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td td>><20-22</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="deprecated"<>td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td<>td>20-22</td><td td/td></tr tr<>class="deprecated"><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td><td>20-22</td td td></td><<> tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td><td>20-22</td td td<>/td></td/td></tr><class="deprecated">< td TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td<>td>20-22</td td td><></td<>/tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256</td><td>20-22</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></td<>/tr<>class="deprecated"<>td>TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384</td><td>20-22</Td><td></td></tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_NULL_SHA</td td><>20-22</td<>td td/td/td>><</tr><class="deprecated"><td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td td<>>20-22</td><td/td/td><<>/tr tr><class="deprecated" td TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</td<>td>20-22</td 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></td>< tr><class="deprecated"><td>TLS_ECDH_anon_WITH_NULL_SHA</td td<>>20-22</<>td td/td>><</tr<>class="deprecated"><td>TLS_ECDH_anon_WITH_RC4_128_SHA</td<>td>20-22</td><td></td></tr><><td>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td<>td>20+</td td>><20+</td/tr t<>><td><> TLS_FALLBACK_SCSV</td<>td td>21+</td<>td/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<>/tr<><>td>TLS_PSK_WITH_AES_128_CBC_SHA</td td td<>>21+</td><td>21+</td></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></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/tr 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><><td>TLS_RSA_WITH_AES_128_GCM_SHA256</td<>td td 20+</td>><td>20+</td<>/tr>><<td>TLS_RSA_WITH_AES_256_CBC_SHA</td><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>><</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"td TLS_RSA_WITH_NULL_MD5>><></Td><td>1-8</td><td></td></tr class<>="deprecated"<>td>TLS_RSA_WITH_NULL_SHA</td><td>1-8</td<>td/td/td><></tr><class="deprecated"<>td>TLS_RSA_WITH_NULL_SHA256</td td>><20-22</td<>td/td>><</tr></tbody></Tisch>

<em>HINWEIS</em>: PSK-Verschlüsselungssammlungen sind standardmäßig nur aktiviert, wenn das SSLContext Modul, über das das Modul erstellt wurde, mit einem PSKKeyManagerinitialisiert wurde.

Hinzugefügt in 1.5.

Java-Dokumentation für javax.net.ssl.SSLEngine.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

SSLEngine()

Konstruktor für eine SSLEngine Bereitstellung ohne Hinweise für eine interne Sitzungswiederverwendungsstrategie.

SSLEngine(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen.

SSLEngine(String, Int32)

Konstruktor für ein SSLEngine.

Eigenschaften

ApplicationProtocol

Gibt den zuletzt für diese Verbindung ausgehandelten Anwendungsprotokollwert zurück.

Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
DelegatedTask

Gibt eine Delegataufgabe für diese Modulinstanz zurück.

EnableSessionCreation

Gibt zurück, ob neue SSL-Sitzungen von diesem Modul erstellt werden können.

Handle

Das Handle für die zugrunde liegende Android-Instanz.

(Geerbt von Object)
HandshakeApplicationProtocol

Gibt den anwendungsprotokollwert zurück, der derzeit in einem SSL/TLS-Handshake ausgehandelt wurde.

HandshakeApplicationProtocolSelector

Ruft die Rückruffunktion ab, die einen Anwendungsprotokollwert während eines SSL/TLS-Handshakes auswählt. -oder- Registriert eine Rückruffunktion, die einen Anwendungsprotokollwert für einen SSL/TLS-Handshake auswählt.

HandshakeSession

Gibt den SSLSession während eines SSL/TLS-Handshakes erstellten Werts zurück.

HandshakeStatus

Gibt den Status des Handshakes dieser Modulinstanz zurück.

IsInboundDone

Gibt zurück, ob von diesem Modul keine eingehenden Daten akzeptiert werden.

IsOutboundDone

Gibt zurück, ob keine ausgehenden Daten von diesem Modul erstellt werden.

JniIdentityHashCode

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
JniPeerMembers

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

NeedClientAuth

Gibt zurück, ob für diese Modulinstanz die Clientauthentifizierung erforderlich ist.

PeerHost

Gibt den Hostnamen des Peers zurück.

PeerPort

Gibt die Portnummer des Peers zurück.

PeerReference

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
Session

Gibt die SSL-Sitzung für diese Modulinstanz zurück.

SSLParameters

Gibt die SSLParameters zurück, die für diese SSLEngine wirksam sind. -or- Wendet SSLParameters auf dieses Modul an.

ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

UseClientMode

Gibt zurück, ob dieses Modul beim Handshaken im Clientmodus ausgeführt werden soll.

WantClientAuth

Gibt zurück, ob dieses Modul die Clientauthentifizierung anfordert.

Methoden

BeginHandshake()

Initiiert handshaking (initial or renegotiation) on this SSLEngine.

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
CloseInbound()

Signale, dass keine eingehenden Netzwerkdaten mehr an diese SSLEnginegesendet werden.

CloseOutbound()

Signalen, dass keine ausgehenden Anwendungsdaten mehr gesendet SSLEnginewerden.

Dispose()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
Dispose(Boolean)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist.

(Geerbt von Object)
GetEnabledCipherSuites()

Gibt die Namen der SSL-Verschlüsselungssammlungen zurück, die derzeit für die Verwendung auf diesem Modul aktiviert sind.

GetEnabledProtocols()

Gibt die Namen der Protokollversionen zurück, die derzeit für die Verwendung mit dieser SSLEngineOption aktiviert sind.

GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
GetSupportedCipherSuites()

Gibt die Namen der Verschlüsselungssammlungen zurück, die für die Verwendung in diesem Modul aktiviert werden können.

GetSupportedProtocols()

Gibt die Namen der Protokolle zurück, die für die Verwendung mit dieser SSLEngineOption aktiviert werden können.

JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
SetEnabledCipherSuites(String[])

Legt die Verschlüsselungssammlungen fest, die für die Verwendung auf diesem Modul aktiviert sind.

SetEnabledProtocols(String[])

Legen Sie die für die Verwendung in diesem Modul aktivierten Protokollversionen fest.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
Unwrap(ByteBuffer, ByteBuffer)

Versucht, SSL/TLS-Netzwerkdaten in einen Nur-Text-Anwendungsdatenpuffer zu decodieren.

Unwrap(ByteBuffer, ByteBuffer[])

Versucht, SSL/TLS-Netzwerkdaten in eine Sequenz von Nur-Text-Anwendungsdatenpuffern zu decodieren.

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

Versucht, SSL/TLS-Netzwerkdaten in eine Unterteilung von Nur-Text-Anwendungsdatenpuffern zu decodieren.

Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wrap(ByteBuffer, ByteBuffer)

Versucht, einen Puffer von Nur-Text-Anwendungsdaten in SSL/TLS-Netzwerkdaten zu codieren.

Wrap(ByteBuffer[], ByteBuffer)

Versucht, Nur-Text-Bytes aus einer Abfolge von Datenpuffern in SSL/TLS-Netzwerkdaten zu codieren.

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

Versucht, Nur-Text-Bytes aus einer Untermenge von Datenpuffern in SSL/TLS-Netzwerkdaten zu codieren.

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.Finalized()

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

GetJniTypeName(IJavaPeerable)

Eine Klasse, die sichere Kommunikation mit Protokollen wie secure Sockets Layer (SSL) oder IETF RFC 2246 "Transport Layer Security" (TLS) -Protokollen ermöglicht, aber transportunabhängig ist.

Gilt für: