如何让Embed Tomcat和Netty支持HTTPS

11 篇文章 0 订阅
6 篇文章 0 订阅

背景:

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

版本要求: 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的改造请参照阿里云的文档,不赘述。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值