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 X509HostnameVerifierDeprecated.static final X509HostnameVerifierDeprecated.static final StringDeprecated.static final StringDeprecated.static final X509HostnameVerifierDeprecated.static final StringDeprecated. -
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 SSLSocketFactoryDeprecated.Obtains default SSL socket factory with an SSL context based on the standard JSSE trust material (cacertsfile in the security properties directory).static SSLSocketFactoryDeprecated.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 5booleanDeprecated.Checks whether a socket connection is secure.voidsetHostnameVerifier(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:
NoSuchAlgorithmExceptionKeyManagementExceptionKeyStoreExceptionUnrecoverableKeyException- 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:
NoSuchAlgorithmExceptionKeyManagementExceptionKeyStoreExceptionUnrecoverableKeyException- 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:
NoSuchAlgorithmExceptionKeyManagementExceptionKeyStoreExceptionUnrecoverableKeyException- Since:
- 4.1
-
SSLSocketFactory
public SSLSocketFactory(TrustStrategy trustStrategy) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException Deprecated.- Throws:
NoSuchAlgorithmExceptionKeyManagementExceptionKeyStoreExceptionUnrecoverableKeyException- 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 (cacertsfile 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:SchemeSocketFactoryCreates a new, unconnected socket. The socket should subsequently be passed toSchemeSocketFactory.connectSocket(Socket, InetSocketAddress, InetSocketAddress, HttpParams).- Specified by:
createSocketin interfaceSchemeSocketFactory- Parameters:
params- Optional parameters. Parameters passed to this method will have no effect. This method will create a unconnected instance ofSocketclass.- 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:SocketFactoryCreates a new, unconnected socket. The socket should subsequently be passed toconnectSocket.- Specified by:
createSocketin 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:SchemeSocketFactoryConnects a socket to the target host with the given remote address.Please note that
HttpInetSocketAddressclass should be used in order to pass the target remote address along with the originalHttpHostvalue used to resolve the address. The use ofHttpInetSocketAddresscan also ensure that no reverse DNS lookup will be performed if the target remote address was specified as an IP address.- Specified by:
connectSocketin interfaceSchemeSocketFactory- Parameters:
socket- the socket to connect, as obtained fromcreateSocket.nullindicates 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, ornullfor anyparams- additionalparametersfor connecting- Returns:
- the connected socket. The returned object may be different
from the
sockargument 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:
isSecurein interfaceSchemeSocketFactory- Specified by:
isSecurein 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:SchemeLayeredSocketFactoryReturns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocketin 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:LayeredSchemeSocketFactoryReturns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocketin 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:SocketFactoryConnects a socket to the given host.- Specified by:
connectSocketin interfaceSocketFactory- Parameters:
socket- the socket to connect, as obtained fromcreateSocket.nullindicates 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, ornullfor anylocalPort- the port on the local machine, 0 or a negative number for anyparams- additionalparametersfor connecting- Returns:
- the connected socket. The returned object may be different
from the
sockargument 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:LayeredSocketFactoryReturns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createSocketin 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:ConnectionSocketFactoryCreates new, unconnected socket. The socket should subsequently be passed toconnectSocketmethod.- Specified by:
createSocketin 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:ConnectionSocketFactoryConnects the socket to the target host with the given resolved remote address.- Specified by:
connectSocketin interfaceConnectionSocketFactory- Parameters:
connectTimeout- connect timeout.socket- the socket to connect, as obtained fromConnectionSocketFactory.createSocket(HttpContext).nullindicates 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, ornullfor any.context- the actual HTTP context.- Returns:
- the connected socket. The returned object may be different
from the
sockargument 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:LayeredConnectionSocketFactoryReturns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.- Specified by:
createLayeredSocketin 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.