Class SSLSocketFactory
- All Implemented Interfaces:
LayeredSchemeSocketFactory
,LayeredSocketFactory
,SchemeLayeredSocketFactory
,SchemeSocketFactory
,SocketFactory
,ConnectionSocketFactory
,LayeredConnectionSocketFactory
SSLSocketFactory can be used to validate the identity of the HTTPS server against a list of trusted certificates and to authenticate to the HTTPS server using a private key.
SSLSocketFactory will enable server authentication when supplied with
a trust-store
file containing one or several trusted certificates. The client
secure socket will reject the connection during the SSL session handshake if the target HTTPS
server attempts to authenticate itself with a non-trusted certificate.
Use JDK keytool utility to import a trusted certificate and generate a trust-store file:
keytool -import -alias "my server cert" -file server.crt -keystore my.truststore
In special cases the standard trust verification process can be bypassed by using a custom
TrustStrategy
. This interface is primarily intended for allowing self-signed
certificates to be accepted as trusted without having to add them to the trust-store file.
SSLSocketFactory will enable client authentication when supplied with
a key-store
file containing a private key/public certificate
pair. The client secure socket will use the private key to authenticate
itself to the target HTTPS server during the SSL session handshake if
requested to do so by the server.
The target HTTPS server will in its turn verify the certificate presented
by the client in order to establish client's authenticity.
Use the following sequence of actions to generate a key-store file
-
Use JDK keytool utility to generate a new key
keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore
For simplicity use the same password for the key as that of the key-store
-
Issue a certificate signing request (CSR)
keytool -certreq -alias "my client key" -file mycertreq.csr -keystore my.keystore
-
Send the certificate request to the trusted Certificate Authority for signature. One may choose to act as her own CA and sign the certificate request using a PKI tool, such as OpenSSL.
-
Import the trusted CA root certificate
keytool -import -alias "my trusted ca" -file caroot.crt -keystore my.keystore
-
Import the PKCS#7 file containg the complete certificate chain
keytool -import -alias "my client key" -file mycert.p7 -keystore my.keystore
-
Verify the content the resultant keystore file
keytool -list -v -keystore my.keystore
- Since:
- 4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final X509HostnameVerifier
Deprecated.static final X509HostnameVerifier
Deprecated.static final String
Deprecated.static final String
Deprecated.static final X509HostnameVerifier
Deprecated.static final String
Deprecated. -
Constructor Summary
ConstructorsConstructorDescriptionSSLSocketFactory
(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver) Deprecated.SSLSocketFactory
(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(KeyStore truststore) Deprecated.SSLSocketFactory
(KeyStore keystore, String keystorePassword) Deprecated.SSLSocketFactory
(KeyStore keystore, String keystorePassword, KeyStore truststore) Deprecated.SSLSocketFactory
(SSLContext sslContext) Deprecated.SSLSocketFactory
(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(SSLContext sslContext, HostNameResolver nameResolver) Deprecated.SSLSocketFactory
(SSLContext sslContext, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier) Deprecated.SSLSocketFactory
(TrustStrategy trustStrategy) Deprecated.SSLSocketFactory
(TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionconnectSocket
(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) Deprecated.Connects the socket to the target host with the given resolved remote address.connectSocket
(Socket socket, String host, int port, InetAddress local, int localPort, HttpParams params) Deprecated.Connects a socket to the given host.connectSocket
(Socket socket, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpParams params) Deprecated.Connects a socket to the target host with the given remote address.createLayeredSocket
(Socket socket, String host, int port, boolean autoClose) Deprecated.Returns a socket connected to the given host that is layered over an existing socket.createLayeredSocket
(Socket socket, String host, int port, HttpParams params) Deprecated.Returns a socket connected to the given host that is layered over an existing socket.createLayeredSocket
(Socket socket, String target, int port, HttpContext context) Deprecated.Returns a socket connected to the given host that is layered over an existing socket.Deprecated.Creates a new, unconnected socket.createSocket
(Socket socket, String host, int port, boolean autoClose) Deprecated.Returns a socket connected to the given host that is layered over an existing socket.createSocket
(HttpParams params) Deprecated.Creates a new, unconnected socket.createSocket
(HttpContext context) Deprecated.Creates new, unconnected socket.Deprecated.static SSLSocketFactory
Deprecated.Obtains default SSL socket factory with an SSL context based on the standard JSSE trust material (cacerts
file in the security properties directory).static SSLSocketFactory
Deprecated.Obtains default SSL socket factory with an SSL context based on system properties as described in "JavaTM Secure Socket Extension (JSSE) Reference Guide for the JavaTM 2 Platform Standard Edition 5boolean
Deprecated.Checks whether a socket connection is secure.void
setHostnameVerifier
(X509HostnameVerifier hostnameVerifier) Deprecated.
-
Field Details
-
TLS
Deprecated.- See Also:
-
SSL
Deprecated.- See Also:
-
SSLV2
Deprecated.- See Also:
-
ALLOW_ALL_HOSTNAME_VERIFIER
Deprecated. -
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
Deprecated. -
STRICT_HOSTNAME_VERIFIER
Deprecated.
-
-
Constructor Details
-
SSLSocketFactory
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated. -
SSLSocketFactory
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated.- Throws:
NoSuchAlgorithmException
KeyManagementException
KeyStoreException
UnrecoverableKeyException
- Since:
- 4.1
-
SSLSocketFactory
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated.- Throws:
NoSuchAlgorithmException
KeyManagementException
KeyStoreException
UnrecoverableKeyException
- Since:
- 4.1
-
SSLSocketFactory
public SSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated. -
SSLSocketFactory
public SSLSocketFactory(KeyStore keystore, String keystorePassword) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated. -
SSLSocketFactory
public SSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated. -
SSLSocketFactory
public SSLSocketFactory(TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated.- Throws:
NoSuchAlgorithmException
KeyManagementException
KeyStoreException
UnrecoverableKeyException
- Since:
- 4.1
-
SSLSocketFactory
public SSLSocketFactory(TrustStrategy trustStrategy) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated.- Throws:
NoSuchAlgorithmException
KeyManagementException
KeyStoreException
UnrecoverableKeyException
- Since:
- 4.1
-
SSLSocketFactory
Deprecated. -
SSLSocketFactory
Deprecated. -
SSLSocketFactory
Deprecated.- Since:
- 4.1
-
SSLSocketFactory
public SSLSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) Deprecated.- Since:
- 4.3
-
SSLSocketFactory
Deprecated.- Since:
- 4.2
-
SSLSocketFactory
public SSLSocketFactory(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier) Deprecated.- Since:
- 4.3
-
-
Method Details
-
getSocketFactory
Deprecated.Obtains default SSL socket factory with an SSL context based on the standard JSSE trust material (cacerts
file in the security properties directory). System properties are not taken into consideration.- Returns:
- default SSL socket factory
- Throws:
SSLInitializationException
-
getSystemSocketFactory
Deprecated.Obtains default SSL socket factory with an SSL context based on system properties as described in "JavaTM Secure Socket Extension (JSSE) Reference Guide for the JavaTM 2 Platform Standard Edition 5- Returns:
- default system SSL socket factory
- Throws:
SSLInitializationException
-
createSocket
Deprecated.Description copied from interface:SchemeSocketFactory
Creates a new, unconnected socket. The socket should subsequently be passed toSchemeSocketFactory.connectSocket(Socket, InetSocketAddress, InetSocketAddress, HttpParams)
.- Specified by:
createSocket
in interfaceSchemeSocketFactory
- Parameters:
params
- Optional parameters. Parameters passed to this method will have no effect. This method will create a unconnected instance ofSocket
class.- Returns:
- a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socket- Since:
- 4.1
-
createSocket
Deprecated.Description copied from interface:SocketFactory
Creates a new, unconnected socket. The socket should subsequently be passed toconnectSocket
.- Specified by:
createSocket
in interfaceSocketFactory
- Returns:
- a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socket
-
connectSocket
public Socket connectSocket(Socket socket, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException Deprecated.Description copied from interface:SchemeSocketFactory
Connects a socket to the target host with the given remote address.Please note that
HttpInetSocketAddress
class should be used in order to pass the target remote address along with the originalHttpHost
value used to resolve the address. The use ofHttpInetSocketAddress
can also ensure that no reverse DNS lookup will be performed if the target remote address was specified as an IP address.- Specified by:
connectSocket
in interfaceSchemeSocketFactory
- Parameters:
socket
- the socket to connect, as obtained fromcreateSocket
.null
indicates that a new socket should be created and connected.remoteAddress
- the remote address to connect to.localAddress
- the local address to bind the socket to, ornull
for anyparams
- additionalparameters
for connecting- Returns:
- the connected socket. The returned object may be different
from the
sock
argument if this factory supports a layered protocol. - Throws:
IOException
- if an I/O error occursUnknownHostException
- if the IP address of the target host can not be determinedConnectTimeoutException
- if the socket cannot be connected within the time limit defined in theparams
- Since:
- 4.1
- See Also:
-
isSecure
Deprecated.Checks whether a socket connection is secure. This factory creates TLS/SSL socket connections which, by default, are considered secure.Derived classes may override this method to perform runtime checks, for example based on the cypher suite.
- Specified by:
isSecure
in interfaceSchemeSocketFactory
- Specified by:
isSecure
in interfaceSocketFactory
- Parameters:
sock
- the connected socket- Returns:
true
- Throws:
IllegalArgumentException
- if the argument is invalid
-
createLayeredSocket
public Socket createLayeredSocket(Socket socket, String host, int port, HttpParams params) throws IOException, UnknownHostException Deprecated.Description copied from interface:SchemeLayeredSocketFactory
Returns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocket
in interfaceSchemeLayeredSocketFactory
- Parameters:
socket
- the existing sockethost
- the name of the target host.port
- the port to connect to on the target hostparams
- HTTP parameters- Returns:
- Socket a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socketUnknownHostException
- if the IP address of the host cannot be determined- Since:
- 4.2
-
createLayeredSocket
public Socket createLayeredSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException Deprecated.Description copied from interface:LayeredSchemeSocketFactory
Returns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocket
in interfaceLayeredSchemeSocketFactory
- Parameters:
socket
- the existing sockethost
- the name of the target host.port
- the port to connect to on the target hostautoClose
- a flag for closing the underling socket when the created socket is closed- Returns:
- Socket a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socketUnknownHostException
- if the IP address of the host cannot be determined
-
setHostnameVerifier
Deprecated. -
getHostnameVerifier
Deprecated. -
connectSocket
public Socket connectSocket(Socket socket, String host, int port, InetAddress local, int localPort, HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException Deprecated.Description copied from interface:SocketFactory
Connects a socket to the given host.- Specified by:
connectSocket
in interfaceSocketFactory
- Parameters:
socket
- the socket to connect, as obtained fromcreateSocket
.null
indicates that a new socket should be created and connected.host
- the host to connect toport
- the port to connect to on the hostlocal
- the local address to bind the socket to, ornull
for anylocalPort
- the port on the local machine, 0 or a negative number for anyparams
- additionalparameters
for connecting- Returns:
- the connected socket. The returned object may be different
from the
sock
argument if this factory supports a layered protocol. - Throws:
IOException
- if an I/O error occursUnknownHostException
- if the IP address of the target host can not be determinedConnectTimeoutException
- if the socket cannot be connected within the time limit defined in theparams
-
createSocket
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException Deprecated.Description copied from interface:LayeredSocketFactory
Returns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createSocket
in interfaceLayeredSocketFactory
- Parameters:
socket
- the existing sockethost
- the host name/IPport
- the port on the hostautoClose
- a flag for closing the underling socket when the created socket is closed- Returns:
- Socket a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socketUnknownHostException
- if the IP address of the host cannot be determined
-
createSocket
Deprecated.Description copied from interface:ConnectionSocketFactory
Creates new, unconnected socket. The socket should subsequently be passed toconnectSocket
method.- Specified by:
createSocket
in interfaceConnectionSocketFactory
- Returns:
- a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socket
-
connectSocket
public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException Deprecated.Description copied from interface:ConnectionSocketFactory
Connects the socket to the target host with the given resolved remote address.- Specified by:
connectSocket
in interfaceConnectionSocketFactory
- Parameters:
connectTimeout
- connect timeout.socket
- the socket to connect, as obtained fromConnectionSocketFactory.createSocket(HttpContext)
.null
indicates that a new socket should be created and connected.host
- target host as specified by the caller (end user).remoteAddress
- the resolved remote address to connect to.localAddress
- the local address to bind the socket to, ornull
for any.context
- the actual HTTP context.- Returns:
- the connected socket. The returned object may be different
from the
sock
argument if this factory supports a layered protocol. - Throws:
IOException
- if an I/O error occurs
-
createLayeredSocket
public Socket createLayeredSocket(Socket socket, String target, int port, HttpContext context) throws IOException Deprecated.Description copied from interface:LayeredConnectionSocketFactory
Returns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocket
in interfaceLayeredConnectionSocketFactory
- Parameters:
socket
- the existing sockettarget
- the name of the target host.port
- the port to connect to on the target host.context
- the actual HTTP context.- Returns:
- Socket a new socket
- Throws:
IOException
- if an I/O error occurs while creating the socket
-
SSLConnectionSocketFactory
.