|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.mina.core.filterchain.IoFilterAdapter
org.apache.mina.filter.ssl.SslFilter
public class SslFilter
An SSL filter that encrypts and decrypts the data exchanged in the session.
Adding this filter triggers SSL handshake procedure immediately by sending
a SSL 'hello' message, so you don't need to call
startSsl(IoSession)
manually unless you are implementing StartTLS
(see below). If you don't want the handshake procedure to start
immediately, please specify false
as autoStart
parameter in
the constructor.
This filter uses an SSLEngine
which was introduced in Java 5, so
Java version 5 or above is mandatory to use this filter. And please note that
this filter only works for TCP/IP connections.
You can use DISABLE_ENCRYPTION_ONCE
attribute to implement StartTLS:
public void messageReceived(IoSession session, Object message) { if (message instanceof MyStartTLSRequest) { // Insert SSLFilter to get ready for handshaking session.getFilterChain().addFirst(sslFilter); // Disable encryption temporarilly. // This attribute will be removed by SSLFilter // inside the Session.write() call below. session.setAttribute(SSLFilter.DISABLE_ENCRYPTION_ONCE, Boolean.TRUE); // Write StartTLSResponse which won't be encrypted. session.write(new MyStartTLSResponse(OK)); // Now DISABLE_ENCRYPTION_ONCE attribute is cleared. assert session.getAttribute(SSLFilter.DISABLE_ENCRYPTION_ONCE) == null; } }
Nested Class Summary | |
---|---|
static class |
SslFilter.SslFilterMessage
A message that is sent from SslFilter when the connection became
secure or is not secure anymore. |
Nested classes/interfaces inherited from interface org.apache.mina.core.filterchain.IoFilter |
---|
IoFilter.NextFilter |
Field Summary | |
---|---|
static AttributeKey |
DISABLE_ENCRYPTION_ONCE
A session attribute key that makes next one write request bypass this filter (not encrypting the data). |
static AttributeKey |
PEER_ADDRESS
A session attribute key that should be set to an InetSocketAddress . |
static SslFilter.SslFilterMessage |
SESSION_SECURED
A special message object which is emitted with a IoHandler.messageReceived(IoSession, Object)
event when the session is secured and its USE_NOTIFICATION
attribute is set. |
static SslFilter.SslFilterMessage |
SESSION_UNSECURED
A special message object which is emitted with a IoHandler.messageReceived(IoSession, Object)
event when the session is not secure anymore and its USE_NOTIFICATION
attribute is set. |
static AttributeKey |
SSL_SESSION
A session attribute key that stores underlying SSLSession
for each session. |
static AttributeKey |
USE_NOTIFICATION
A session attribute key that makes this filter to emit a IoHandler.messageReceived(IoSession, Object) event with a
special message (SESSION_SECURED or SESSION_UNSECURED ). |
Constructor Summary | |
---|---|
SslFilter(SSLContext sslContext)
Creates a new SSL filter using the specified SSLContext . |
|
SslFilter(SSLContext sslContext,
boolean autoStart)
Creates a new SSL filter using the specified SSLContext . |
Method Summary | |
---|---|
void |
exceptionCaught(IoFilter.NextFilter nextFilter,
IoSession session,
Throwable cause)
Filters IoHandler.exceptionCaught(IoSession,Throwable)
event. |
void |
filterClose(IoFilter.NextFilter nextFilter,
IoSession session)
Filters IoSession.close() method invocation. |
void |
filterWrite(IoFilter.NextFilter nextFilter,
IoSession session,
WriteRequest writeRequest)
Filters IoSession.write(Object) method invocation. |
String[] |
getEnabledCipherSuites()
Returns the list of cipher suites to be enabled when SSLEngine
is initialized. |
String[] |
getEnabledProtocols()
Returns the list of protocols to be enabled when SSLEngine
is initialized. |
SSLSession |
getSslSession(IoSession session)
Returns the underlying SSLSession for the specified session. |
boolean |
isNeedClientAuth()
Returns true if the engine will require client authentication. |
boolean |
isSslStarted(IoSession session)
Returns true if and only if the specified session is encrypted/decrypted over SSL/TLS currently. |
boolean |
isUseClientMode()
Returns true if the engine is set to use client mode when handshaking. |
boolean |
isWantClientAuth()
Returns true if the engine will request client authentication. |
void |
messageReceived(IoFilter.NextFilter nextFilter,
IoSession session,
Object message)
Filters IoHandler.messageReceived(IoSession,Object)
event. |
void |
messageSent(IoFilter.NextFilter nextFilter,
IoSession session,
WriteRequest writeRequest)
Filters IoHandler.messageSent(IoSession,Object)
event. |
void |
onPostAdd(IoFilterChain parent,
String name,
IoFilter.NextFilter nextFilter)
Invoked after this filter is added to the specified parent. |
void |
onPreAdd(IoFilterChain parent,
String name,
IoFilter.NextFilter nextFilter)
Executed just before the filter is added into the chain, we do : check that we don't have a SSL filter already present we update the next filter we create the SSL handler helper class and we store it into the session's Attributes |
void |
onPreRemove(IoFilterChain parent,
String name,
IoFilter.NextFilter nextFilter)
Invoked before this filter is removed from the specified parent. |
void |
sessionClosed(IoFilter.NextFilter nextFilter,
IoSession session)
Filters IoHandler.sessionClosed(IoSession) event. |
void |
setEnabledCipherSuites(String[] cipherSuites)
Sets the list of cipher suites to be enabled when SSLEngine
is initialized. |
void |
setEnabledProtocols(String[] protocols)
Sets the list of protocols to be enabled when SSLEngine
is initialized. |
void |
setNeedClientAuth(boolean needClientAuth)
Configures the engine to require client authentication. |
void |
setUseClientMode(boolean clientMode)
Configures the engine to use client (or server) mode when handshaking. |
void |
setWantClientAuth(boolean wantClientAuth)
Configures the engine to request client authentication. |
boolean |
startSsl(IoSession session)
(Re)starts SSL session for the specified session if not started yet. |
WriteFuture |
stopSsl(IoSession session)
Stops the SSL session by sending TLS close_notify message to initiate TLS closure. |
Methods inherited from class org.apache.mina.core.filterchain.IoFilterAdapter |
---|
destroy, init, onPostRemove, sessionCreated, sessionIdle, sessionOpened, toString |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final AttributeKey SSL_SESSION
SSLSession
for each session.
public static final AttributeKey DISABLE_ENCRYPTION_ONCE
Boolean.TRUE
is preferred.) The attribute is automatically removed from the session
attribute map as soon as IoSession.write(Object)
is invoked,
and therefore should be put again if you want to make more messages
bypass this filter. This is especially useful when you implement
StartTLS.
public static final AttributeKey USE_NOTIFICATION
IoHandler.messageReceived(IoSession, Object)
event with a
special message (SESSION_SECURED
or SESSION_UNSECURED
).
This is a marker attribute, which means that you can put whatever as its
value. (Boolean.TRUE
is preferred.) By default, this filter
doesn't emit any events related with SSL session flow control.
public static final AttributeKey PEER_ADDRESS
InetSocketAddress
.
Setting this attribute causes
SSLContext.createSSLEngine(String, int)
to be called passing the
hostname and port of the InetSocketAddress
to get an
SSLEngine
instance. If not set SSLContext.createSSLEngine()
will be called.SSLSession
objects may be cached and reused
when in client mode.
SSLContext.createSSLEngine(String, int)
public static final SslFilter.SslFilterMessage SESSION_SECURED
IoHandler.messageReceived(IoSession, Object)
event when the session is secured and its USE_NOTIFICATION
attribute is set.
public static final SslFilter.SslFilterMessage SESSION_UNSECURED
IoHandler.messageReceived(IoSession, Object)
event when the session is not secure anymore and its USE_NOTIFICATION
attribute is set.
Constructor Detail |
---|
public SslFilter(SSLContext sslContext)
SSLContext
.
The handshake will start immediately.
public SslFilter(SSLContext sslContext, boolean autoStart)
SSLContext
.
If the autostart
flag is set to true
, the
handshake will start immediately.
Method Detail |
---|
public SSLSession getSslSession(IoSession session)
SSLSession
for the specified session.
SSLSession
is initialized yet.public boolean startSsl(IoSession session) throws SSLException
SSLException
- if failed to start the SSL sessionpublic boolean isSslStarted(IoSession session)
public WriteFuture stopSsl(IoSession session) throws SSLException
session
- the IoSession
to initiate TLS closure
SSLException
- if failed to initiate TLS closure
IllegalArgumentException
- if this filter is not managing the specified sessionpublic boolean isUseClientMode()
public void setUseClientMode(boolean clientMode)
public boolean isNeedClientAuth()
public void setNeedClientAuth(boolean needClientAuth)
public boolean isWantClientAuth()
public void setWantClientAuth(boolean wantClientAuth)
public String[] getEnabledCipherSuites()
SSLEngine
is initialized.
SSLEngine
's default.'public void setEnabledCipherSuites(String[] cipherSuites)
SSLEngine
is initialized.
cipherSuites
- null means 'use SSLEngine
's default.'public String[] getEnabledProtocols()
SSLEngine
is initialized.
SSLEngine
's default.'public void setEnabledProtocols(String[] protocols)
SSLEngine
is initialized.
protocols
- null means 'use SSLEngine
's default.'public void onPreAdd(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) throws SSLException
onPreAdd
in interface IoFilter
onPreAdd
in class IoFilterAdapter
parent
- the parent who called this methodname
- the name assigned to this filternextFilter
- the IoFilter.NextFilter
for this filter. You can reuse
this object until this filter is removed from the chain.
SSLException
public void onPostAdd(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) throws SSLException
IoFilterAdapter
IoFilter.init()
is invoked.
onPostAdd
in interface IoFilter
onPostAdd
in class IoFilterAdapter
parent
- the parent who called this methodname
- the name assigned to this filternextFilter
- the IoFilter.NextFilter
for this filter. You can reuse
this object until this filter is removed from the chain.
SSLException
public void onPreRemove(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) throws SSLException
IoFilterAdapter
IoFilter.destroy()
is invoked.
onPreRemove
in interface IoFilter
onPreRemove
in class IoFilterAdapter
parent
- the parent who called this methodname
- the name assigned to this filternextFilter
- the IoFilter.NextFilter
for this filter. You can reuse
this object until this filter is removed from the chain.
SSLException
public void sessionClosed(IoFilter.NextFilter nextFilter, IoSession session) throws SSLException
IoFilterAdapter
IoHandler.sessionClosed(IoSession)
event.
sessionClosed
in interface IoFilter
sessionClosed
in class IoFilterAdapter
SSLException
public void messageReceived(IoFilter.NextFilter nextFilter, IoSession session, Object message) throws SSLException
IoFilterAdapter
IoHandler.messageReceived(IoSession,Object)
event.
messageReceived
in interface IoFilter
messageReceived
in class IoFilterAdapter
SSLException
public void messageSent(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest)
IoFilterAdapter
IoHandler.messageSent(IoSession,Object)
event.
messageSent
in interface IoFilter
messageSent
in class IoFilterAdapter
public void exceptionCaught(IoFilter.NextFilter nextFilter, IoSession session, Throwable cause) throws Exception
IoFilterAdapter
IoHandler.exceptionCaught(IoSession,Throwable)
event.
exceptionCaught
in interface IoFilter
exceptionCaught
in class IoFilterAdapter
Exception
public void filterWrite(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws SSLException
IoFilterAdapter
IoSession.write(Object)
method invocation.
filterWrite
in interface IoFilter
filterWrite
in class IoFilterAdapter
SSLException
public void filterClose(IoFilter.NextFilter nextFilter, IoSession session) throws SSLException
IoFilterAdapter
IoSession.close()
method invocation.
filterClose
in interface IoFilter
filterClose
in class IoFilterAdapter
SSLException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |