Skip to content
This repository was archived by the owner on Feb 24, 2022. It is now read-only.

Bug/ssl context need client mode#195

Open
bobpaulin wants to merge 4 commits intojurmous:masterfrom
bobpaulin:bug/ssl-context-need-client-mode
Open

Bug/ssl context need client mode#195
bobpaulin wants to merge 4 commits intojurmous:masterfrom
bobpaulin:bug/ssl-context-need-client-mode

Conversation

@bobpaulin
Copy link
Copy Markdown

It looks like the SSLContext should set

sslEngine.setUseClientMode(true)

proir to passing the SSLEngine to Netty (Seems to be related to https://mail.openjdk.java.net/pipermail/security-dev/2018-July/017715.html) . I've attached a test that will fail without the change testSSLContextClientModeSetSslEtcd.

I was using the camel-etcd "etcd-keys" component in Camel 3.7.0 which passes a SSLContext from javax.security rather than an SslContext from Netty. I was getting the exception below on Java 8 and 11.

java.io.IOException: java.lang.IllegalStateException: Client/Server mode not yet set.
	at mousio.etcd4j.promises.EtcdResponsePromise.get(EtcdResponsePromise.java:72)
	at org.apache.camel.component.etcd.EtcdKeysProducer.processGet(EtcdKeysProducer.java:93)
	at org.apache.camel.component.etcd.EtcdKeysProducer.process(EtcdKeysProducer.java:56)
	at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:66)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:169)
	at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395)
	at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
	at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:147)
	at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:312)
	at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:207)
	at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:76)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.IllegalStateException: Client/Server mode not yet set.
	at sun.security.ssl.SSLEngineImpl.kickstartHandshake(SSLEngineImpl.java:680)
	at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1230)
	at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186)
	at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:509)
	at io.netty.handler.ssl.SslHandler.wrap(SslHandler.java:1038)
	at io.netty.handler.ssl.SslHandler.wrap(SslHandler.java:824)
	at io.netty.handler.ssl.SslHandler.wrapAndFlush(SslHandler.java:792)
	at io.netty.handler.ssl.SslHandler.flush(SslHandler.java:773)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:748)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:740)
	at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:726)
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush(CombinedChannelDuplexHandler.java:531)
	at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:125)
	at io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:356)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:748)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:740)
	at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:726)
	at io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:343)
	at io.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:133)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:748)
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:740)
	at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:726)
	at io.netty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:967)
	at io.netty.channel.AbstractChannel.flush(AbstractChannel.java:242)
	at mousio.etcd4j.transport.EtcdNettyClient.createAndSendHttpRequest(EtcdNettyClient.java:394)
	at mousio.etcd4j.transport.EtcdNettyClient.access$300(EtcdNettyClient.java:61)
	at mousio.etcd4j.transport.EtcdNettyClient$3.operationComplete(EtcdNettyClient.java:295)
	at mousio.etcd4j.transport.EtcdNettyClient$3.operationComplete(EtcdNettyClient.java:249)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604)
	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:300)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)

This PR should address the issue. Seemed like the most appropriate place to fix it. Please let me know if you have any

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant