TLS Support auf Netty

xTailsPvP

Mitglied
Hallo,
ich habe eine Netty Server-Client Verbindung und möchte die Kommunikation über eine TLS machen, damit die Verbindung verschlüsselt ist.
Aber bin mir leider nicht sicher, wie ich eine Netty Server-Client Kommunikation über TLS machen kann.

Danke schonmal für eure Antworten!
 

xTailsPvP

Mitglied

Ich weiß nicht, ob das so weit stimmt, wie ich das gemacht habe.

Java:
KeyManager km = new KeyManager() {
}
SslContext ssl = SslContextBuilder.forServer(km).protocols("TLSv1.3").build();

Java:
ChannelPipeline pipeline = channel.pipeline();
                    pipeline.addLast("ssl", ssl.newHandler(channel.alloc()));
                    pipeline.addLast(new StringEncoder(CHARSET),
                            new LineBasedFrameDecoder(MAX_LINE_LENGTH), new StringDecoder(CHARSET),
                            new ServerListener());

So habe ich das bis jetzt gemacht. Ich hoffe das stimmt soweit.
 

xTailsPvP

Mitglied
Hast du das Beispiel denn angeschaut?
Ja, aber es funktioniert nicht...

[CODE lang="java" title="Netty-Server"] KeyManager km = new KeyManager() {
};
SslContext context = SslContextBuilder.forServer(km).protocols("TLSv1.3").build();
SslHandler sslhandler = new SslHandler(
context.newEngine(channel.alloc(), SERVER_HOST, PORT), true);

ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast("ssl", sslhandler);
pipeline.addLast(new StringEncoder(CHARSET),
new LineBasedFrameDecoder(MAX_LINE_LENGTH), new StringDecoder(CHARSET),
new ServerListener());[/CODE]

[CODE lang="java" title="Netty-Client"] SslContext context = SslContextBuilder.forClient().protocols("TLSv1.3").build();
SslHandler sslhandler = new SslHandler(
context.newEngine(channel.alloc(), SERVER_HOST, PORT), false);
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast("ssl", sslhandler);
pipeline.addLast(new StringEncoder(CHARSET),
new LineBasedFrameDecoder(MAX_LINE_LENGTH), new StringDecoder(CHARSET),
Client.clientListener);[/CODE]
 
K

kneitzel

Gast
Das erste wichtige ist: Was heißt, dass es nicht funktioniert? Was passiert? Was für Fehlermeldungen bekommst Du? Das ist so in der Form mal wieder ein Stochern im Nebel....

Also gemäß dem Buch "Netty in action", Kapitel 11, sollte der SslHandler Konstructor vom Client mit true und beim Server mit false aufgerufen werden. Das ist bei dir umgekehrt. Was das bewirkt / ausmacht: Da fehlt mir der Überblick.

Ansonsten vielleicht noch der Hinweis, dass Du zur Not den Rahmen von https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/securechat verwenden kannst. Das ist das SecureChat Beispiel von netty...

Ansonsten noch gibt es auch noch https://medium.com/@maanadev/netty-with-https-tls-9bf699e07f01 das evtl. etwas hilfreiches enthalten könnte ...
 

xTailsPvP

Mitglied
Das erste wichtige ist: Was heißt, dass es nicht funktioniert? Was passiert? Was für Fehlermeldungen bekommst Du? Das ist so in der Form mal wieder ein Stochern im Nebel....

Also gemäß dem Buch "Netty in action", Kapitel 11, sollte der SslHandler Konstructor vom Client mit true und beim Server mit false aufgerufen werden. Das ist bei dir umgekehrt. Was das bewirkt / ausmacht: Da fehlt mir der Überblick.

Ansonsten vielleicht noch der Hinweis, dass Du zur Not den Rahmen von https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/securechat verwenden kannst. Das ist das SecureChat Beispiel von netty...

Ansonsten noch gibt es auch noch https://medium.com/@maanadev/netty-with-https-tls-9bf699e07f01 das evtl. etwas hilfreiches enthalten könnte ...

Also ich habe den Fehler herausgefunden, doch weiß nicht, wie ich es fixen soll:

Code:
[CODE lang="java" title="Netty-Server"] SelfSignedCertificate ssc = new SelfSignedCertificate();
SslContext context = SslContextBuilder
.forServer(ssc.certificate(), ssc.privateKey()).protocols("TLSv1.3")
.build();

SslHandler sslhandler = context.newHandler(channel.alloc());
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast(sslhandler);
pipeline.addLast(new StringEncoder(CHARSET),
new LineBasedFrameDecoder(MAX_LINE_LENGTH), new StringDecoder(CHARSET),
new ServerListener());[/CODE]

[CODE lang="java" title="Netty-Client"] SslContext context = SslContextBuilder.forClient().protocols("TLSv1.3")
.trustManager(InsecureTrustManagerFactory.INSTANCE).build();
SslHandler sslhandler = context.newHandler(channel.alloc(), SERVER_HOST, PORT);

ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast(sslhandler);
pipeline.addLast(new StringEncoder(CHARSET),
new LineBasedFrameDecoder(MAX_LINE_LENGTH), new StringDecoder(CHARSET),
Client.clientListener);[/CODE]


[CODE lang="java" title="Fehler"]Dez 27, 2020 3:37:43 PM io.netty.channel.ChannelInitializer exceptionCaught
WARNUNG: Failed to initialize a channel. Closing: [id: 0x19530208]
java.lang.IllegalArgumentException: TLSv1.3
at sun.security.ssl.ProtocolVersion.valueOf(Unknown Source)
at sun.security.ssl.ProtocolList.convert(Unknown Source)
at sun.security.ssl.ProtocolList.<init>(Unknown Source)
at sun.security.ssl.SSLEngineImpl.setEnabledProtocols(Unknown Source)
at io.netty.handler.ssl.JdkSslContext.configureAndWrapEngine(JdkSslContext.java:342)
at io.netty.handler.ssl.JdkSslContext.newEngine(JdkSslContext.java:336)
at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:1007)
at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:999)
at de.tails.chatsystem.main.ChatSystem$2.initChannel(ChatSystem.java:84)
at de.tails.chatsystem.main.ChatSystem$2.initChannel(ChatSystem.java:1)
at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129)
at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112)
at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938)
at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609)
at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46)
at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463)
at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115)
at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:502)
at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:417)
at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:474)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
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(Unknown Source)[/CODE]

So wie ihr seht ist der Fehler bei der Methode: .protocols("TLSv1.3")
Ich habe es vorhin auf "TLSv1.2" umgeändert und es hat geklappt.
Aber ich möchte klarerweise TLSv1.3 nutzen. Weiß jemand was ich dazu machen muss?
 
K

kneitzel

Gast
Welche Version von netty nutzt Du? TLSv1.3 wird erst ab 4.1.56 per default enabled:

Und die Java version spielt evtl. auch eine Rolle - TLS 1.3 ist ab Java 11 drin. Aber Netty nutzt normalerweise OpenSSL und nicht die Java Engine meine ich ... aber da bin ich auch kein Experte muss ich gestehen. Mit Netty habe ich bisher kaum gearbeitet.
 

xTailsPvP

Mitglied
Meine Netty Version:
[CODE lang="java" title="Netty Version"] <dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.56.Final</version>
<scope>compile</scope>
</dependency>
</dependencies>[/CODE]

Ich nutze die Java Version 8 und vermutlich liegt es wie du gesagt hast daran.
Aber ich habe folgendes gefunden: https://netty.io/news/2018/10/30/4-1-31-Final.html
Hier steht das man TLS1.3 ab Java 11 oder mit netty-tcnative / netty-tcnative-boringssl-static nutzen kann.
Aber wie kann man denn eine netty-tcnative/netty-tcmative-boringssl-static nutzen?
 

Ähnliche Java Themen

Neue Themen


Oben