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开发~

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌康ACG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值