SSLSocket and SSLServerSocket Classes
The javax.net.ssl.SSLSocket class is a subclass
of the standard Java™ java.net.Socket class.
It supports all of the standard socket methods and adds additional
methods specific to secure sockets. Instances of this class encapsulate
the SSLContext under
which they were created. There are APIs to control the creation of
secure socket sessions for a socket instance but trust and key management
are not directly exposed.
The javax.net.ssl.SSLServerSocket class is analogous
to the SSLSocket class, but is used specifically
for creating server sockets.
To prevent peer spoofing, you should always verify the credentials presented to a SSLSocket.
Implementation note: Due to the complexity of the SSL and TLS protocols,
it is difficult to predict whether incoming bytes on a connection
are handshake or application data, and how that data might affect
the current connection state (even causing the process to block).
In the IBM JSSE
implementation, the available() method on the object
obtained by SSLSocket.getInputStream() returns a
count of the number of application data bytes successfully decrypted
from the SSL connection but not yet read by the application.
Obtaining an SSLSocket
Instances
of SSLSocket can be obtained in two ways. First,
an SSLSocket can be created by an instance of SSLSocketFactory via
one of the several createSocket methods on that class.
The second way to obtain SSLSockets is through the accept method
on the SSLServerSocket class.