Package org.conscrypt
Class ConscryptFileDescriptorSocket
- java.lang.Object
-
- java.net.Socket
-
- javax.net.ssl.SSLSocket
-
- org.conscrypt.AbstractConscryptSocket
-
- org.conscrypt.OpenSSLSocketImpl
-
- org.conscrypt.ConscryptFileDescriptorSocket
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,NativeCrypto.SSLHandshakeCallbacks,SSLParametersImpl.AliasChooser,SSLParametersImpl.PSKCallbacks
- Direct Known Subclasses:
Java8FileDescriptorSocket
class ConscryptFileDescriptorSocket extends OpenSSLSocketImpl implements NativeCrypto.SSLHandshakeCallbacks, SSLParametersImpl.PSKCallbacks, SSLParametersImpl.AliasChooser
Implementation of the class OpenSSLSocketImpl based on OpenSSL.Extensions to SSLSocket include:
- handshake timeout
- session tickets
- Server Name Indication
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classConscryptFileDescriptorSocket.SSLInputStreamThis inner class provides input data stream functionality for the OpenSSL native implementation.private classConscryptFileDescriptorSocket.SSLOutputStreamThis inner class provides output data stream functionality for the OpenSSL native implementation.
-
Field Summary
Fields Modifier and Type Field Description private ActiveSessionactiveSessionprivate OpenSSLKeychannelIdPrivateKeyPrivate key for the TLS Channel ID extension.private SessionSnapshotclosedSessionA snapshot of the active session when the engine was closed.private static booleanDBG_STATEprivate javax.net.ssl.SSLSessionexternalSessionThe session object exposed externally from this class.private java.lang.Objectguardprivate inthandshakeTimeoutMillisecondsprivate ConscryptFileDescriptorSocket.SSLInputStreamisProtected by synchronizing on ssl.private ConscryptFileDescriptorSocket.SSLOutputStreamosProtected by synchronizing on ssl.private NativeSslsslWrapper around the underlying SSL object.private SSLParametersImplsslParametersprivate intstateprivate intwriteTimeoutMilliseconds-
Fields inherited from class org.conscrypt.AbstractConscryptSocket
socket
-
-
Constructor Summary
Constructors Constructor Description ConscryptFileDescriptorSocket(java.lang.String hostname, int port, java.net.InetAddress clientAddress, int clientPort, SSLParametersImpl sslParameters)ConscryptFileDescriptorSocket(java.lang.String hostname, int port, SSLParametersImpl sslParameters)ConscryptFileDescriptorSocket(java.net.InetAddress address, int port, java.net.InetAddress clientAddress, int clientPort, SSLParametersImpl sslParameters)ConscryptFileDescriptorSocket(java.net.InetAddress address, int port, SSLParametersImpl sslParameters)ConscryptFileDescriptorSocket(java.net.Socket socket, java.lang.String hostname, int port, boolean autoClose, SSLParametersImpl sslParameters)ConscryptFileDescriptorSocket(SSLParametersImpl sslParameters)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidassertReadableOrWriteableState()java.lang.StringchooseClientAlias(javax.net.ssl.X509KeyManager keyManager, javax.security.auth.x500.X500Principal[] issuers, java.lang.String[] keyTypes)java.lang.StringchooseClientPSKIdentity(PSKKeyManager keyManager, java.lang.String identityHint)java.lang.StringchooseServerAlias(javax.net.ssl.X509KeyManager keyManager, java.lang.String keyType)java.lang.StringchooseServerPSKIdentityHint(PSKKeyManager keyManager)voidclientCertificateRequested(byte[] keyTypeBytes, int[] signatureAlgs, byte[][] asn1DerEncodedPrincipals)Called on an SSL client when the server requests (or requires a certificate).intclientPSKKeyRequested(java.lang.String identityHint, byte[] identity, byte[] key)Gets the key to be used in client mode for this connection in Pre-Shared Key (PSK) key exchange.private ClientSessionContextclientSessionContext()voidclose()private voidcloseUnderlyingSocket()(package private) byte[]exportKeyingMaterial(java.lang.String label, byte[] context, int length)Exports a value derived from the TLS master secret as described in RFC 5705.protected voidfinalize()private voidfree()(package private) javax.net.ssl.SSLSessiongetActiveSession()Called byAbstractConscryptSocket.notifyHandshakeCompletedListeners()to get the currently active session.java.lang.StringgetApplicationProtocol()(package private) java.lang.String[]getApplicationProtocols()Returns the list of supported ALPN protocols.byte[]getChannelId()Gets the TLS Channel ID for this server socket.java.lang.String[]getEnabledCipherSuites()java.lang.String[]getEnabledProtocols()booleangetEnableSessionCreation()java.lang.StringgetHandshakeApplicationProtocol()javax.net.ssl.SSLSessiongetHandshakeSession()java.io.InputStreamgetInputStream()booleangetNeedClientAuth()java.io.OutputStreamgetOutputStream()javax.crypto.SecretKeygetPSKKey(PSKKeyManager keyManager, java.lang.String identityHint, java.lang.String identity)javax.net.ssl.SSLSessiongetSession()intgetSoWriteTimeout()Note write timeouts are not part of the javax.net.ssl.SSLSocket APIjavax.net.ssl.SSLParametersgetSSLParameters()java.lang.String[]getSupportedCipherSuites()java.lang.String[]getSupportedProtocols()(package private) byte[]getTlsUnique()Returns the tls-unique channel binding value for this connection, per RFC 5929.booleangetUseClientMode()booleangetWantClientAuth()private static NativeSslnewSsl(SSLParametersImpl sslParameters, ConscryptFileDescriptorSocket engine)voidonNewSessionEstablished(long sslSessionNativePtr)Called when a new session has been established and may be added to the session cache.voidonSSLStateChange(int type, int val)Called when SSL state changes.private ConscryptSessionprovideAfterHandshakeSession()private ConscryptSessionprovideHandshakeSession()private ConscryptSessionprovideSession()intselectApplicationProtocol(byte[] protocols)Called when acting as a server, the socket has anApplicationProtocolSelectorAdapterassociated with it, and the application protocol needs to be selected.voidserverCertificateRequested()Called when acting as a server during ClientHello processing before a decision to resume a session is made.intserverPSKKeyRequested(java.lang.String identityHint, java.lang.String identity, byte[] key)Gets the key to be used in server mode for this connection in Pre-Shared Key (PSK) key exchange.longserverSessionRequested(byte[] id)Called for servers where TLS < 1.3 (TLS 1.3 uses session tickets rather than application session caches).private AbstractSessionContextsessionContext()(package private) voidsetApplicationProtocols(java.lang.String[] protocols)Sets the list of ALPN protocols.voidsetApplicationProtocolSelector(ApplicationProtocolSelector selector)Sets an application-provided ALPN protocol selector.(package private) voidsetApplicationProtocolSelector(ApplicationProtocolSelectorAdapter selector)voidsetChannelIdEnabled(boolean enabled)Enables/disables TLS Channel ID for this server socket.voidsetChannelIdPrivateKey(java.security.PrivateKey privateKey)Sets thePrivateKeyto be used for TLS Channel ID by this client socket.voidsetEnabledCipherSuites(java.lang.String[] suites)voidsetEnabledProtocols(java.lang.String[] protocols)voidsetEnableSessionCreation(boolean flag)voidsetHandshakeTimeout(int handshakeTimeoutMilliseconds)Set the handshake timeout on this socket.voidsetHostname(java.lang.String hostname)This method enables Server Name Indication.voidsetNeedClientAuth(boolean need)voidsetSoWriteTimeout(int writeTimeoutMilliseconds)Note write timeouts are not part of the javax.net.ssl.SSLSocket APIvoidsetSSLParameters(javax.net.ssl.SSLParameters p)voidsetUseClientMode(boolean mode)voidsetUseSessionTickets(boolean useSessionTickets)This method enables session ticket support.voidsetWantClientAuth(boolean want)private voidshutdownAndFreeSslNative()voidstartHandshake()Starts a TLS/SSL handshake on this connection using some native methods from the OpenSSL library.private voidtransitionTo(int newState)voidverifyCertificateChain(byte[][] certChain, java.lang.String authMethod)Verify that the certificate chain is trusted.private voidwaitForHandshake()-
Methods inherited from class org.conscrypt.OpenSSLSocketImpl
getAlpnSelectedProtocol, getFileDescriptor$, getHostname, getHostnameOrIP, getNpnSelectedProtocol, setAlpnProtocols, setAlpnProtocols, setNpnProtocols
-
Methods inherited from class org.conscrypt.AbstractConscryptSocket
addHandshakeCompletedListener, bind, checkOpen, connect, connect, getChannel, getInetAddress, getKeepAlive, getLocalAddress, getLocalPort, getLocalSocketAddress, getOOBInline, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoLinger, getSoTimeout, getTcpNoDelay, getTrafficClass, isBound, isClosed, isConnected, isInputShutdown, isOutputShutdown, notifyHandshakeCompletedListeners, peerInfoProvider, removeHandshakeCompletedListener, sendUrgentData, setKeepAlive, setOOBInline, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoLinger, setSoTimeout, setTcpNoDelay, setTrafficClass, shutdownInput, shutdownOutput, toString
-
Methods inherited from class javax.net.ssl.SSLSocket
getHandshakeApplicationProtocolSelector, setHandshakeApplicationProtocolSelector
-
-
-
-
Field Detail
-
DBG_STATE
private static final boolean DBG_STATE
- See Also:
- Constant Field Values
-
state
private int state
-
ssl
private final NativeSsl ssl
Wrapper around the underlying SSL object.
-
is
private ConscryptFileDescriptorSocket.SSLInputStream is
Protected by synchronizing on ssl. Starts as null, set by getInputStream.
-
os
private ConscryptFileDescriptorSocket.SSLOutputStream os
Protected by synchronizing on ssl. Starts as null, set by getInputStream.
-
sslParameters
private final SSLParametersImpl sslParameters
-
guard
private final java.lang.Object guard
-
channelIdPrivateKey
private OpenSSLKey channelIdPrivateKey
Private key for the TLS Channel ID extension. This field is client-side only. Set during startHandshake.
-
activeSession
private final ActiveSession activeSession
-
closedSession
private SessionSnapshot closedSession
A snapshot of the active session when the engine was closed.
-
externalSession
private final javax.net.ssl.SSLSession externalSession
The session object exposed externally from this class.
-
writeTimeoutMilliseconds
private int writeTimeoutMilliseconds
-
handshakeTimeoutMilliseconds
private int handshakeTimeoutMilliseconds
-
-
Constructor Detail
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(SSLParametersImpl sslParameters) throws java.io.IOException
- Throws:
java.io.IOException
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(java.lang.String hostname, int port, SSLParametersImpl sslParameters) throws java.io.IOException- Throws:
java.io.IOException
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(java.net.InetAddress address, int port, SSLParametersImpl sslParameters) throws java.io.IOException- Throws:
java.io.IOException
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(java.lang.String hostname, int port, java.net.InetAddress clientAddress, int clientPort, SSLParametersImpl sslParameters) throws java.io.IOException- Throws:
java.io.IOException
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(java.net.InetAddress address, int port, java.net.InetAddress clientAddress, int clientPort, SSLParametersImpl sslParameters) throws java.io.IOException- Throws:
java.io.IOException
-
ConscryptFileDescriptorSocket
ConscryptFileDescriptorSocket(java.net.Socket socket, java.lang.String hostname, int port, boolean autoClose, SSLParametersImpl sslParameters) throws java.io.IOException- Throws:
java.io.IOException
-
-
Method Detail
-
newSsl
private static NativeSsl newSsl(SSLParametersImpl sslParameters, ConscryptFileDescriptorSocket engine) throws javax.net.ssl.SSLException
- Throws:
javax.net.ssl.SSLException
-
startHandshake
public final void startHandshake() throws java.io.IOExceptionStarts a TLS/SSL handshake on this connection using some native methods from the OpenSSL library. It can negotiate new encryption keys, change cipher suites, or initiate a new session. The certificate chain is verified if the correspondent property in java.Security is set. All listeners are notified at the end of the TLS/SSL handshake.- Specified by:
startHandshakein classjavax.net.ssl.SSLSocket- Throws:
java.io.IOException
-
clientCertificateRequested
public final void clientCertificateRequested(byte[] keyTypeBytes, int[] signatureAlgs, byte[][] asn1DerEncodedPrincipals) throws java.security.cert.CertificateEncodingException, javax.net.ssl.SSLExceptionDescription copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled on an SSL client when the server requests (or requires a certificate). The client can respond by using SSL_use_certificate and SSL_use_PrivateKey to set a certificate if has an appropriate one available, similar to how the server provides its certificate.- Specified by:
clientCertificateRequestedin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
keyTypeBytes- key types supported by the server, convertible to strings with #keyTypeasn1DerEncodedPrincipals- CAs known to the server- Throws:
java.security.cert.CertificateEncodingExceptionjavax.net.ssl.SSLException
-
clientPSKKeyRequested
public final int clientPSKKeyRequested(java.lang.String identityHint, byte[] identity, byte[] key)Description copied from interface:NativeCrypto.SSLHandshakeCallbacksGets the key to be used in client mode for this connection in Pre-Shared Key (PSK) key exchange.- Specified by:
clientPSKKeyRequestedin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
identityHint- PSK identity hint provided by the server ornullif no hint provided.identity- buffer to be populated with PSK identity (NULL-terminated modified UTF-8) by this method. This identity will be provided to the server.key- buffer to be populated with key material by this method.- Returns:
- number of bytes this method stored in the
keybuffer or0if an error occurred in which case the handshake will be aborted.
-
serverPSKKeyRequested
public final int serverPSKKeyRequested(java.lang.String identityHint, java.lang.String identity, byte[] key)Description copied from interface:NativeCrypto.SSLHandshakeCallbacksGets the key to be used in server mode for this connection in Pre-Shared Key (PSK) key exchange.- Specified by:
serverPSKKeyRequestedin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
identityHint- PSK identity hint provided by this server to the client ornullif no hint was provided.identity- PSK identity provided by the client.key- buffer to be populated with key material by this method.- Returns:
- number of bytes this method stored in the
keybuffer or0if an error occurred in which case the handshake will be aborted.
-
onSSLStateChange
public final void onSSLStateChange(int type, int val)Description copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled when SSL state changes. This could be handshake completion.- Specified by:
onSSLStateChangein interfaceNativeCrypto.SSLHandshakeCallbacks
-
onNewSessionEstablished
public final void onNewSessionEstablished(long sslSessionNativePtr)
Description copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled when a new session has been established and may be added to the session cache. The callee is responsible for incrementing the reference count on the returned session.- Specified by:
onNewSessionEstablishedin interfaceNativeCrypto.SSLHandshakeCallbacks
-
serverSessionRequested
public final long serverSessionRequested(byte[] id)
Description copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled for servers where TLS < 1.3 (TLS 1.3 uses session tickets rather than application session caches). Looks up the session by ID in the application's session cache. If a valid session is returned, this callback is responsible for incrementing the reference count (and any required synchronization).- Specified by:
serverSessionRequestedin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
id- the ID of the session to find.- Returns:
- the cached session or
0if no session was found matching the given ID.
-
serverCertificateRequested
public final void serverCertificateRequested() throws java.io.IOExceptionDescription copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled when acting as a server during ClientHello processing before a decision to resume a session is made. This allows the selection of the correct server certificate based on things like Server Name Indication (SNI).- Specified by:
serverCertificateRequestedin interfaceNativeCrypto.SSLHandshakeCallbacks- Throws:
java.io.IOException- if there was an error during certificate selection.
-
verifyCertificateChain
public final void verifyCertificateChain(byte[][] certChain, java.lang.String authMethod) throws java.security.cert.CertificateExceptionDescription copied from interface:NativeCrypto.SSLHandshakeCallbacksVerify that the certificate chain is trusted.- Specified by:
verifyCertificateChainin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
certChain- chain of X.509 certificates in their encoded formauthMethod- auth algorithm name- Throws:
java.security.cert.CertificateException- if the certificate is untrusted
-
getInputStream
public final java.io.InputStream getInputStream() throws java.io.IOException- Overrides:
getInputStreamin classAbstractConscryptSocket- Throws:
java.io.IOException
-
getOutputStream
public final java.io.OutputStream getOutputStream() throws java.io.IOException- Overrides:
getOutputStreamin classAbstractConscryptSocket- Throws:
java.io.IOException
-
assertReadableOrWriteableState
private void assertReadableOrWriteableState()
-
waitForHandshake
private void waitForHandshake() throws java.io.IOException- Throws:
java.io.IOException
-
getSession
public final javax.net.ssl.SSLSession getSession()
- Specified by:
getSessionin classjavax.net.ssl.SSLSocket
-
provideSession
private ConscryptSession provideSession()
-
provideAfterHandshakeSession
private ConscryptSession provideAfterHandshakeSession()
-
provideHandshakeSession
private ConscryptSession provideHandshakeSession()
-
getActiveSession
final javax.net.ssl.SSLSession getActiveSession()
Description copied from class:AbstractConscryptSocketCalled byAbstractConscryptSocket.notifyHandshakeCompletedListeners()to get the currently active session. UnlikeSSLSocket.getSession(), this method must not block.- Specified by:
getActiveSessionin classAbstractConscryptSocket
-
getHandshakeSession
public final javax.net.ssl.SSLSession getHandshakeSession()
- Specified by:
getHandshakeSessionin classOpenSSLSocketImpl
-
getEnableSessionCreation
public final boolean getEnableSessionCreation()
- Specified by:
getEnableSessionCreationin classjavax.net.ssl.SSLSocket
-
setEnableSessionCreation
public final void setEnableSessionCreation(boolean flag)
- Specified by:
setEnableSessionCreationin classjavax.net.ssl.SSLSocket
-
getSupportedCipherSuites
public final java.lang.String[] getSupportedCipherSuites()
- Specified by:
getSupportedCipherSuitesin classjavax.net.ssl.SSLSocket
-
getEnabledCipherSuites
public final java.lang.String[] getEnabledCipherSuites()
- Specified by:
getEnabledCipherSuitesin classjavax.net.ssl.SSLSocket
-
setEnabledCipherSuites
public final void setEnabledCipherSuites(java.lang.String[] suites)
- Specified by:
setEnabledCipherSuitesin classjavax.net.ssl.SSLSocket
-
getSupportedProtocols
public final java.lang.String[] getSupportedProtocols()
- Specified by:
getSupportedProtocolsin classjavax.net.ssl.SSLSocket
-
getEnabledProtocols
public final java.lang.String[] getEnabledProtocols()
- Specified by:
getEnabledProtocolsin classjavax.net.ssl.SSLSocket
-
setEnabledProtocols
public final void setEnabledProtocols(java.lang.String[] protocols)
- Specified by:
setEnabledProtocolsin classjavax.net.ssl.SSLSocket
-
setUseSessionTickets
public final void setUseSessionTickets(boolean useSessionTickets)
This method enables session ticket support.- Specified by:
setUseSessionTicketsin classOpenSSLSocketImpl- Parameters:
useSessionTickets- True to enable session tickets
-
setHostname
public final void setHostname(java.lang.String hostname)
This method enables Server Name Indication. If the hostname is not a valid SNI hostname, the SNI extension will be omitted from the handshake.- Overrides:
setHostnamein classOpenSSLSocketImpl- Parameters:
hostname- the desired SNI hostname, or null to disable
-
setChannelIdEnabled
public final void setChannelIdEnabled(boolean enabled)
Enables/disables TLS Channel ID for this server socket.This method needs to be invoked before the handshake starts.
- Specified by:
setChannelIdEnabledin classOpenSSLSocketImpl- Throws:
java.lang.IllegalStateException- if this is a client socket or if the handshake has already started.
-
getChannelId
public final byte[] getChannelId() throws javax.net.ssl.SSLExceptionGets the TLS Channel ID for this server socket. Channel ID is only available once the handshake completes.- Specified by:
getChannelIdin classOpenSSLSocketImpl- Returns:
- channel ID or
nullif not available. - Throws:
java.lang.IllegalStateException- if this is a client socket or if the handshake has not yet completed.javax.net.ssl.SSLException- if channel ID is available but could not be obtained.
-
setChannelIdPrivateKey
public final void setChannelIdPrivateKey(java.security.PrivateKey privateKey)
Sets thePrivateKeyto be used for TLS Channel ID by this client socket.This method needs to be invoked before the handshake starts.
- Specified by:
setChannelIdPrivateKeyin classOpenSSLSocketImpl- Parameters:
privateKey- private key (enables TLS Channel ID) ornullfor no key (disables TLS Channel ID). The private key must be an Elliptic Curve (EC) key based on the NIST P-256 curve (aka SECG secp256r1 or ANSI X9.62 prime256v1).- Throws:
java.lang.IllegalStateException- if this is a server socket or if the handshake has already started.
-
getTlsUnique
byte[] getTlsUnique()
Description copied from class:AbstractConscryptSocketReturns the tls-unique channel binding value for this connection, per RFC 5929. This will returnnullif there is no such value available, such as if the handshake has not yet completed or this connection is closed.- Specified by:
getTlsUniquein classAbstractConscryptSocket
-
exportKeyingMaterial
byte[] exportKeyingMaterial(java.lang.String label, byte[] context, int length) throws javax.net.ssl.SSLExceptionDescription copied from class:AbstractConscryptSocketExports a value derived from the TLS master secret as described in RFC 5705.- Specified by:
exportKeyingMaterialin classAbstractConscryptSocket- Parameters:
label- the label to use in calculating the exported value. This must be an ASCII-only string.context- the application-specific context value to use in calculating the exported value. This may benullto use no application context, which is treated differently than an empty byte array.length- the number of bytes of keying material to return.- Returns:
- a value of the specified length, or
nullif the handshake has not yet completed or the connection has been closed. - Throws:
javax.net.ssl.SSLException- if the value could not be exported.
-
getUseClientMode
public final boolean getUseClientMode()
- Specified by:
getUseClientModein classjavax.net.ssl.SSLSocket
-
setUseClientMode
public final void setUseClientMode(boolean mode)
- Specified by:
setUseClientModein classjavax.net.ssl.SSLSocket
-
getWantClientAuth
public final boolean getWantClientAuth()
- Specified by:
getWantClientAuthin classjavax.net.ssl.SSLSocket
-
getNeedClientAuth
public final boolean getNeedClientAuth()
- Specified by:
getNeedClientAuthin classjavax.net.ssl.SSLSocket
-
setNeedClientAuth
public final void setNeedClientAuth(boolean need)
- Specified by:
setNeedClientAuthin classjavax.net.ssl.SSLSocket
-
setWantClientAuth
public final void setWantClientAuth(boolean want)
- Specified by:
setWantClientAuthin classjavax.net.ssl.SSLSocket
-
setSoWriteTimeout
public final void setSoWriteTimeout(int writeTimeoutMilliseconds) throws java.net.SocketExceptionNote write timeouts are not part of the javax.net.ssl.SSLSocket API- Overrides:
setSoWriteTimeoutin classOpenSSLSocketImpl- Throws:
java.net.SocketException
-
getSoWriteTimeout
public final int getSoWriteTimeout() throws java.net.SocketExceptionNote write timeouts are not part of the javax.net.ssl.SSLSocket API- Overrides:
getSoWriteTimeoutin classOpenSSLSocketImpl- Throws:
java.net.SocketException
-
setHandshakeTimeout
public final void setHandshakeTimeout(int handshakeTimeoutMilliseconds) throws java.net.SocketExceptionSet the handshake timeout on this socket. This timeout is specified in milliseconds and will be used only during the handshake process.- Overrides:
setHandshakeTimeoutin classOpenSSLSocketImpl- Throws:
java.net.SocketException
-
close
public final void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classAbstractConscryptSocket- Throws:
java.io.IOException
-
shutdownAndFreeSslNative
private void shutdownAndFreeSslNative() throws java.io.IOException- Throws:
java.io.IOException
-
closeUnderlyingSocket
private void closeUnderlyingSocket() throws java.io.IOException- Throws:
java.io.IOException
-
free
private void free()
-
finalize
protected final void finalize() throws java.lang.Throwable- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable
-
setApplicationProtocolSelector
public final void setApplicationProtocolSelector(ApplicationProtocolSelector selector)
Description copied from class:AbstractConscryptSocketSets an application-provided ALPN protocol selector. If provided, this will override the list of protocols set byAbstractConscryptSocket.setApplicationProtocols(String[]).- Specified by:
setApplicationProtocolSelectorin classAbstractConscryptSocket
-
setApplicationProtocolSelector
final void setApplicationProtocolSelector(ApplicationProtocolSelectorAdapter selector)
- Specified by:
setApplicationProtocolSelectorin classAbstractConscryptSocket
-
selectApplicationProtocol
public int selectApplicationProtocol(byte[] protocols)
Description copied from interface:NativeCrypto.SSLHandshakeCallbacksCalled when acting as a server, the socket has anApplicationProtocolSelectorAdapterassociated with it, and the application protocol needs to be selected.- Specified by:
selectApplicationProtocolin interfaceNativeCrypto.SSLHandshakeCallbacks- Parameters:
protocols- list of application protocols in length-prefix format- Returns:
- the index offset of the selected protocol
-
setApplicationProtocols
final void setApplicationProtocols(java.lang.String[] protocols)
Description copied from class:AbstractConscryptSocketSets the list of ALPN protocols.- Specified by:
setApplicationProtocolsin classAbstractConscryptSocket- Parameters:
protocols- the list of ALPN protocols
-
getApplicationProtocols
final java.lang.String[] getApplicationProtocols()
Description copied from class:AbstractConscryptSocketReturns the list of supported ALPN protocols.- Specified by:
getApplicationProtocolsin classAbstractConscryptSocket
-
getApplicationProtocol
public final java.lang.String getApplicationProtocol()
- Specified by:
getApplicationProtocolin classAbstractConscryptSocket
-
getHandshakeApplicationProtocol
public final java.lang.String getHandshakeApplicationProtocol()
- Specified by:
getHandshakeApplicationProtocolin classAbstractConscryptSocket
-
getSSLParameters
public final javax.net.ssl.SSLParameters getSSLParameters()
- Overrides:
getSSLParametersin classjavax.net.ssl.SSLSocket
-
setSSLParameters
public final void setSSLParameters(javax.net.ssl.SSLParameters p)
- Overrides:
setSSLParametersin classjavax.net.ssl.SSLSocket
-
chooseServerPSKIdentityHint
public final java.lang.String chooseServerPSKIdentityHint(PSKKeyManager keyManager)
- Specified by:
chooseServerPSKIdentityHintin interfaceSSLParametersImpl.PSKCallbacks
-
chooseClientPSKIdentity
public final java.lang.String chooseClientPSKIdentity(PSKKeyManager keyManager, java.lang.String identityHint)
- Specified by:
chooseClientPSKIdentityin interfaceSSLParametersImpl.PSKCallbacks
-
getPSKKey
public final javax.crypto.SecretKey getPSKKey(PSKKeyManager keyManager, java.lang.String identityHint, java.lang.String identity)
- Specified by:
getPSKKeyin interfaceSSLParametersImpl.PSKCallbacks
-
chooseServerAlias
public final java.lang.String chooseServerAlias(javax.net.ssl.X509KeyManager keyManager, java.lang.String keyType)- Specified by:
chooseServerAliasin interfaceSSLParametersImpl.AliasChooser
-
chooseClientAlias
public final java.lang.String chooseClientAlias(javax.net.ssl.X509KeyManager keyManager, javax.security.auth.x500.X500Principal[] issuers, java.lang.String[] keyTypes)- Specified by:
chooseClientAliasin interfaceSSLParametersImpl.AliasChooser
-
clientSessionContext
private ClientSessionContext clientSessionContext()
-
sessionContext
private AbstractSessionContext sessionContext()
-
transitionTo
private void transitionTo(int newState)
-
-