netty配置SSL、netty配置https(开发)

netty配置SSL、netty配置https(开发)

我们在开发下使用ssl,所用的证书将不被客户端信任。

转自:https://lingkang.top/archives/netty-pei-zhi-ssl

方案一

快速。使用netty提供的临时签发证书

    private static SslContext sslContext = null;
    public ServerChannelHandler(RouterConfig config) {
        this.config = config;
        try {
            if (sslContext != null)
                return;
            // 使用临时签发的一个证书
            SelfSignedCertificate ssc = new SelfSignedCertificate();
            sslContext = SslContextBuilder.forServer(ssc.certificate(),
                    ssc.privateKey()).build();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

配置

@Slf4j
public class ServerChannelHandler extends ChannelInitializer<SocketChannel> {
    private final RouterConfig config;
    private static SslContext sslContext = null;

    public ServerChannelHandler(RouterConfig config) {
        this.config = config;
        try {
            if (sslContext != null)
                return;
            // 使用临时签发的一个证书
            SelfSignedCertificate ssc = new SelfSignedCertificate();
            sslContext = SslContextBuilder.forServer(ssc.certificate(),
                    ssc.privateKey()).build();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        // 使用netty临时签发的证书
        pipeline.addLast(sslContext.newHandler(ch.alloc()));

        pipeline.addLast(new HttpServerCodec());// http编解码
        pipeline.addLast(new HttpObjectAggregator(config.getMaxContentLength()));
        pipeline.addLast(new DispatcherHandler(config));
    }
}

访问时需要你提前加上https,不会为你自动重定向到https
https://localhost:9595/
在这里插入图片描述
在这里插入图片描述

但是此时你发现控制台:
在这里插入图片描述

这是因为证书不被客户端信任,如果你是使用 logback日志,可以配置忽略它:
logback.xmlconfiguration中添加

<logger name="io.netty.channel.DefaultChannelPipeline" level="OFF"/>

上面的警告日志将不再打印,nice~

方案二

使用jdk自签一个jks证书:

keytool -genkeypair -alias lk -keyalg RSA -keypass 123456 -storepass 123456 -keyalg RSA -keysize 2048 -validity 3650 -keystore lk.jks

在这里插入图片描述

配置ssl

@Slf4j
public class ServerChannelHandler extends ChannelInitializer<SocketChannel> {
    private final RouterConfig config;

    public ServerChannelHandler(RouterConfig config) {
        this.config = config;
    }

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        // ssl, 每次访问都要加载新的 SSLEngine 对象
        SSLEngine sslEngine = getSslContext().createSSLEngine();
        // 声明服务端
        sslEngine.setUseClientMode(false);
        pipeline.addLast(new SslHandler(sslEngine));

        pipeline.addLast(new HttpServerCodec());// http编解码
        pipeline.addLast(new HttpObjectAggregator(config.getMaxContentLength()));
        pipeline.addLast(new DispatcherHandler(config));
    }

    private static SSLContext getSslContext() throws Exception {
        // 密码
        char[] passArray = "123456".toCharArray();
        SSLContext sslContext = SSLContext.getInstance("TLSv1");
        KeyStore ks = KeyStore.getInstance("JKS");
        //加载keytool 生成的文件
        FileInputStream inputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\temp\\ssl\\lk.jks");
        ks.load(inputStream, passArray);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(ks, passArray);
        sslContext.init(kmf.getKeyManagers(), null, null);
        inputStream.close();
        return sslContext;
    }
}

效果
在这里插入图片描述

相关推荐

  1. Netty websocket配置wss

    2024-05-14 06:04:16       33 阅读
  2. Netty HTTP

    2024-05-14 06:04:16       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 06:04:16       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 06:04:16       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 06:04:16       82 阅读
  4. Python语言-面向对象

    2024-05-14 06:04:16       91 阅读

热门阅读

  1. MySQL中的多表设计

    2024-05-14 06:04:16       26 阅读
  2. 【PyTorch】torch.distributed()的含义和使用方法

    2024-05-14 06:04:16       30 阅读
  3. 喜马拉雅xm音频解码

    2024-05-14 06:04:16       33 阅读
  4. TCP传输的三次握手四次挥手策略

    2024-05-14 06:04:16       27 阅读
  5. 机器学习概念:几种常见的距离参数概念和应用

    2024-05-14 06:04:16       21 阅读
  6. 多线程中的单例模式

    2024-05-14 06:04:16       26 阅读
  7. 网络层相关协议

    2024-05-14 06:04:16       25 阅读
  8. 微信小程序、uniapp密码小眼睛

    2024-05-14 06:04:16       29 阅读
  9. springboot 开启缓存 @EnableCaching(使用redis)

    2024-05-14 06:04:16       33 阅读
  10. 蓝桥杯备战20.有奖问答_动态规划

    2024-05-14 06:04:16       33 阅读
  11. 【经验分享】SFTP使用指南

    2024-05-14 06:04:16       28 阅读