netty配置SSL、netty配置https(生产环境)

netty配置SSL、netty配置https(生产环境)

上一篇提到了如何在开发环境使用SSL:https://lingkang.top/archives/netty-pei-zhi-ssl

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

那么netty如何使用可信任的证书呢?分以下步骤:

  • 1、可靠机构颁发正规证书
  • 2、正规证书转换为netty可加载的证书
  • 3、netty加载证书处理channel初始化

1、搞一个证书

需要的证书有那些要求?

证书 格式
公钥 PEM格式的X.509证书链文件
私钥 PKCS#8

假设你从不知名机构(阿里云、腾讯、华为云、Let’s Encrypt等)搞了个证书:

# 从nginx中搞来的
ssl_certificate /www/sites/lingkang.top/ssl/fullchain.pem; 
ssl_certificate_key /www/sites/lingkang.top/ssl/privkey.pem; 

其中nginx使用的privkey.pemPKCS#1,你需要将它转为PKCS#8
证书域名:lingkang.top

2、转为netty可加载证书

fullchain.pem可直接加载,privkey.pemPKCS#1需要转换为PKCS#8
需要用到工具 openssl

  • 任意找一台Linux服务器,它通常自带了 openssl
  • window下直接使用 git 命令行

我这里就不用Linux了,用的是git命令行,相信经常开发的朋友都人手安装一个git了
执行命令将PKCS#1转为PKCS#8

openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_pkcs8.pem

在这里插入图片描述
在这里插入图片描述

netty加载证书

代码如下:

/**
 * @author lingkang
 * Created by 2024/5/5
 */
@Slf4j
public class ServerInitHandler extends ChannelInitializer<SocketChannel> {
    private final RouterConfig config;

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

    private static SslContext sslContext;

    static {
        SslContextBuilder forServer = SslContextBuilder.forServer(
                new File("C:\\Users\\Administrator\\Desktop\\temp\\key\\fullchain.pem"),
                new File("C:\\Users\\Administrator\\Desktop\\temp\\key\\privkey_pkcs8.pem"),
                null
        );
        try {
            // 你可以在构建之前手动配置信任、安全管理启
            sslContext = forServer.build();
        } catch (Exception e) {
            throw new RuntimeException("证书加载失败", e);
        }
    }

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        // ssl处理
        pipeline.addLast(sslContext.newHandler(ch.alloc()));

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

访问证书地址:https://lingkang.top:9595/
在这里插入图片描述
证书情况:
在这里插入图片描述

不用域名访问时:
在这里插入图片描述

提示

1、我的netty程序是把请求转发到 https://1it.top 这个域名上

2、我window下开发需要将 127.0.0.1 lingkang.top 配置到hosts 文件下,让它域名解析到本地
在这里插入图片描述

最后,点个关注吧。我会更新很多好玩的java开发~

相关推荐

  1. JDK生成https配置

    2024-05-14 06:04:04       9 阅读
  2. Netty websocket配置wss

    2024-05-14 06:04:04       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 06:04:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 06:04:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 06:04:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 06:04:04       20 阅读

热门阅读

  1. 喜马拉雅xm音频解码

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

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

    2024-05-14 06:04:04       10 阅读
  4. 多线程中的单例模式

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

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

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

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

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

    2024-05-14 06:04:04       9 阅读
  10. 云原生周刊:Kubernetes Grafana 看板更新 | 2024.5.13

    2024-05-14 06:04:04       11 阅读
  11. C++ QT设计模式:迭代器模式

    2024-05-14 06:04:04       9 阅读