Package io.netty.handler.ssl
Class SslMasterKeyHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.handler.ssl.SslMasterKeyHandler
-
- All Implemented Interfaces:
ChannelHandler
,ChannelInboundHandler
- Direct Known Subclasses:
SslMasterKeyHandler.WiresharkSslMasterKeyHandler
public abstract class SslMasterKeyHandler extends ChannelInboundHandlerAdapter
TheSslMasterKeyHandler
is a channel-handler you can include in your pipeline to consume the master key & session identifier for a TLS session. This can be very useful, for instance theSslMasterKeyHandler.WiresharkSslMasterKeyHandler
implementation will log the secret & identifier in a format that is consumable by Wireshark -- allowing easy decryption of pcap/tcpdumps.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
SslMasterKeyHandler.WiresharkSslMasterKeyHandler
Record the session identifier and master key to theInternalLogger
namedio.netty.wireshark
.-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description private static InternalLogger
logger
private static java.lang.Class<?>
SSL_SESSIONIMPL_CLASS
The JRE SSLSessionImpl cannot be importedprivate static java.lang.reflect.Field
SSL_SESSIONIMPL_MASTER_SECRET_FIELD
The master key field in the SSLSessionImplstatic java.lang.String
SYSTEM_PROP_KEY
A system property that can be used to turn on/off theSslMasterKeyHandler
dynamically without having to edit your pipeline.private static java.lang.Throwable
UNAVAILABILITY_CAUSE
The unavailability cause of whether the private Sun implementation of SSLSessionImpl is available.
-
Constructor Summary
Constructors Modifier Constructor Description protected
SslMasterKeyHandler()
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract void
accept(javax.crypto.SecretKey masterKey, javax.net.ssl.SSLSession session)
Consume the master key for the session and the sessionIdstatic void
ensureSunSslEngineAvailability()
Ensure that SSLSessionImpl is available.static boolean
isSunSslEngineAvailable()
static SslMasterKeyHandler
newWireSharkSslMasterKeyHandler()
Create aSslMasterKeyHandler.WiresharkSslMasterKeyHandler
instance.static java.lang.Throwable
sunSslEngineUnavailabilityCause()
Returns the cause of unavailability.void
userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt)
CallsChannelHandlerContext.fireUserEventTriggered(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
.-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelInactive, channelRead, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded, handlerRemoved
-
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
SSL_SESSIONIMPL_CLASS
private static final java.lang.Class<?> SSL_SESSIONIMPL_CLASS
The JRE SSLSessionImpl cannot be imported
-
SSL_SESSIONIMPL_MASTER_SECRET_FIELD
private static final java.lang.reflect.Field SSL_SESSIONIMPL_MASTER_SECRET_FIELD
The master key field in the SSLSessionImpl
-
SYSTEM_PROP_KEY
public static final java.lang.String SYSTEM_PROP_KEY
A system property that can be used to turn on/off theSslMasterKeyHandler
dynamically without having to edit your pipeline.-Dio.netty.ssl.masterKeyHandler=true
- See Also:
- Constant Field Values
-
UNAVAILABILITY_CAUSE
private static final java.lang.Throwable UNAVAILABILITY_CAUSE
The unavailability cause of whether the private Sun implementation of SSLSessionImpl is available.
-
-
Method Detail
-
ensureSunSslEngineAvailability
public static void ensureSunSslEngineAvailability()
Ensure that SSLSessionImpl is available.- Throws:
java.lang.UnsatisfiedLinkError
- if unavailable
-
sunSslEngineUnavailabilityCause
public static java.lang.Throwable sunSslEngineUnavailabilityCause()
Returns the cause of unavailability.- Returns:
- the cause if unavailable.
null
if available.
-
isSunSslEngineAvailable
public static boolean isSunSslEngineAvailable()
-
accept
protected abstract void accept(javax.crypto.SecretKey masterKey, javax.net.ssl.SSLSession session)
Consume the master key for the session and the sessionId- Parameters:
masterKey
- A 48-byte secret shared between the client and server.session
- The current TLS session
-
userEventTriggered
public final void userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt)
Description copied from class:ChannelInboundHandlerAdapter
CallsChannelHandlerContext.fireUserEventTriggered(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
. Sub-classes may override this method to change behavior.- Specified by:
userEventTriggered
in interfaceChannelInboundHandler
- Overrides:
userEventTriggered
in classChannelInboundHandlerAdapter
-
newWireSharkSslMasterKeyHandler
public static SslMasterKeyHandler newWireSharkSslMasterKeyHandler()
Create aSslMasterKeyHandler.WiresharkSslMasterKeyHandler
instance. This TLS master key handler logs the master key and session-id in a format understood by Wireshark -- this can be especially useful if you need to ever decrypt a TLS session and are using perfect forward secrecy (i.e. Diffie-Hellman) The key and session identifier are forwarded to the log named 'io.netty.wireshark'.
-
-