如何让Embed Tomcat和Netty支持HTTPS

简介: 如何让Embed Tomcat和Netty支持HTTPS

背景:

根据苹果 APPSTORE 于 2017年1月1日起 启用ATS 协议的要求(即客户端和服务器的HTTP 请求 需要启用SSL连接)需要尽快将我们 服务端的HTTP 转换成HTTPS,详见

【SSL证书】应对IOS安全策略升级,你准备好了吗?

版本要求: JDK:1.8

              Embed Tomcat 8.0.33

              Netty  4.0.33

申请证书:目前是在阿里云上申请证书服务:->传送门<-,我选择的是Tomcat类型的PFX证书,我们需要获得的是ooxx.pfx证书,和一串数字的证书密码。

改造Netty:

把证书放到应用下,主要是对HttpServerPipelineFactory增加对SSL的处理:

public class HttpsServerPipelineFactory extends ChannelInitializer<Channel> {
  @Override
  protected void initChannel(Channel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();
    //=====================以下为为SSL处理新增的代码=================================
    // Uncomment the following line if you want HTTPS
    SSLContext sslcontext = SSLContext.getInstance("TLS");
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    KeyStore ks = KeyStore.getInstance("PKCS12");
    String keyStorePath ="inner.pfx";
    String keyPassword ="123456787654321";
    ks.load(new FileInputStream(keyStorePath), keyPassword.toCharArray());
    kmf.init(ks, keyPassword.toCharArray());
    sslcontext.init(kmf.getKeyManagers(), null, null);
    SSLEngine engine = sslcontext.createSSLEngine();
    engine.setUseClientMode(false);
    engine.setNeedClientAuth(false);
    pipeline.addFirst("ssl", new SslHandler(engine));
    //=====================以上为为SSL处理新增的代码=================================
    pipeline.addLast("decoder", new HttpRequestDecoder(16 * 1024 * 1024, 8192, 8192));
    pipeline.addLast("encoder", new HttpResponseEncoder());
    pipeline.addLast("deflater", new HttpContentCompressor());
    pipeline.addLast("handler", new HttpServerHandler());
  }
}



从中我们可以看到,我们已按要求支持最新的TLSv1.2协议和ECDH加密算法


改造Embed Tomcat:

由于我们使用的是内置的Tomcat,改造过程其实和外置Tomcat有类似点,但也有差别:差别之处。在application.properties中加些参数:

server.ssl.key-store=inner.pfx
server.ssl.key-store-password=12345678987654321
server.ssl.keyStoreType=PKCS12


重启应用,应用就支持HTTPS了。

在内网调试过程中,https只要证书和密码对的上就行,只要通信能成功就可以了,不用介意红叉的问题,外置Tomcat的改造和Nginx的改造请参照阿里云的文档,不赘述。


目录
相关文章
|
4月前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
7月前
|
运维 Java 应用服务中间件
Tomcat详解(七)——Tomcat使用https配置实战
Tomcat详解(七)——Tomcat使用https配置实战
1257 4
|
7月前
|
Java 应用服务中间件 API
从零手写实现 tomcat-06-servlet bio/thread/nio/netty 池化处理
该文介绍了逐步改进的网络服务器实现,从最初的 BIO 基础版到使用线程池的 BIO+Thread,再到 NIO 版本和 NIO+Thread,最后展示了一个使用 Netty 框架的简洁实现。文章旨在说明如何解决阻塞问题,并对比不同模型的优劣,最终推荐使用 Netty 以简化 NIO 编程。
|
7月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
7月前
|
负载均衡 安全 应用服务中间件
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
220 0
|
应用服务中间件 Apache
tomcat http 404
tomcat http 404
147 0
|
应用服务中间件
tomcat 异常 HTTP method names must be tokens
tomcat 异常 HTTP method names must be tokens
1311 0
|
Java 应用服务中间件 Linux
HTTPS && Tomcat && Servlet && 博客系统 && 软件测试的概念 && Linux
HTTPS && Tomcat && Servlet && 博客系统 && 软件测试的概念 && Linux
69 0
|
XML 安全 应用服务中间件
HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍
HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍
|
域名解析 运维 负载均衡
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
410 1