“不积跬步,无以至千里。”
说明
Netty使用SslHandler实现加密通信,认证方式为双向认证,单向认证忽略,话不多说,直接上代码
引入依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.100.Final</version>
</dependency>
生成keystore.jks文件
keytool -genkeypair -alias your_alias -keyalg RSA -keystore keystore.jks -keysize 2048
Server端
import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.SslProvider;
import io.netty.util.CharsetUtil;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.security.KeyStore;
public class NettySslServer {
private static final int PORT = 8888;
public static void main(String[] args) throws Exception {
// 加载SSL证书
String serverKeyStorePath = "/home/admin/server/keystore.jks";
String clientKeyStorePath = "/home/admin/client/keystore.jks";
String serverKeyStorePassword = "happya";
String clientKeyStorePassword = "happya";
// 创建SslContext
KeyStore keyStore = KeyStore.getInstance("JKS");
try (InputStream keyStoreInputStream = new FileInputStream(serverKeyStorePath)) {
keyStore.load(keyStoreInputStream, serverKeyStorePassword.toCharArray());
}
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, serverKeyStorePassword.toCh

本文详细介绍了如何使用Netty库在Java中实现一个支持双向认证的SSL服务器,包括引入依赖、生成keystore文件、配置SslContext以及在Server和Client端的代码实现。
最低0.47元/天 解锁文章
326

被折叠的 条评论
为什么被折叠?



