前言
如今,企业级应用程序的高性能安全加密的常见场景是同时支持http和https两种协议,这篇文章考虑如何让spring boot应用程序同时支持http和https两种协议。spring boot的web容器已经有容器可以支持http2了,这个例子中选择了undertow高性能服务器作为spring boot的web容器。
what-什么是https://www.kuaiidc.com/tag/http2" title="http2">http2
https://www.kuaiidc.com/tag/http2" title="http2">http2是http协议自1999年http1.1发布后的首个更新,主要基于spdy协议。由互联网工程任务组(ietf)的 hypertext transfer protocol bis(httpbis)工作小组进行开发。该组织于2014年12月将http/2标准提议递交至iesg进行讨论,于2015年2月17日被批准。https://www.kuaiidc.com/tag/http2" title="http2">http2标准于2015年5月以rfc7540正式发表。
why-为什么要用https://www.kuaiidc.com/tag/http2" title="http2">http2
https://www.kuaiidc.com/tag/http2" title="http2">http2是第二代的http协议,关于https://www.kuaiidc.com/tag/http2" title="http2">http2的优点这里就不阐述了,可以参考下面链接文章了解:http://ju.outofmemory.cn/entr…。
下图是akamai 公司建立的一个官方的演示,主要用来说明在性能上http/1.1和http/2在性能升的差别。同时请求 379 张图片,http/1.1加载用时4.54s,http/2加载用时1.47s,大家可以通过 https://https://www.kuaiidc.com/tag/http2" title="http2">http2.akamai.com/demo 来感受下https://www.kuaiidc.com/tag/http2" title="http2">http2的提速。
what-什么是https
要说https我们得先说ssl(secure sockets layer,安全套接层),这是一种为网络通信提供安全及数据完整性的一种安全协议,ssl在网络传输层对网络连接进行加密。ssl协议可以分为两层:ssl记录协议(ssl record protocol),它建立在可靠的传输协议如tcp之上,为高层协议提供数据封装、压缩、加密等基本功能支持;ssl握手协议(ssl handshake protocol),它建立在ssl记录协议之上,用于在实际数据传输开始之前,通信双方进行身份认证、协商加密算法、交换加密密钥等。在web开发中,我们是通过https来实现ssl的。https是以安全为目标的http通道,简单来说就是http的安全版,即在http下加入ssl层,所以说https的安全基础是ssl,不过这里有一个地方需要小伙伴们注意,就是我们现在市场上使用的都是tls协议(transport layer security,它来源于ssl),而不是ssl,由于ssl出现较早并且被各大浏览器支持因此成为了https的代名词。
why-为什么要用https
超文本传输协议http协议被用于在web浏览器和网站服务器之间传递信息。http协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此http协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决http协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议https。为了数据传输的安全,https在http的基础上加入了ssl协议,ssl依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
https和http的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
how-如何使用https和http
如果你使用spring boot,并且想在内嵌服务器中添加https,需要如下步骤:
要有一个ssl证书,买的或者自己生成的。
在spring boot中启动https。
将http重定向到https(可选)。
一.通过云平台获取ssl证书
证书获取有两种方式,一种是自己通过jdk的keytool命令生成,一种是通过证书授权机构购买,本文为了方便采用第二种从阿里云购买证书。
去阿里云购买证书(免费版),并提交审核资料
下载ssl证书
在证书目录下执行阿里云提供的命令,密码都填 pfx-password.txt 中的内容(三次),会生成 javalsj.jks 文件。
二.通过jdk自带的keytool工具进行生成
生成证书(在要生成证书的目录下,按着 shit 建同时鼠标右键出现[在此处打开命令窗口])
利用"keytool -list -v -keystore charleslai.jks"查看jks中生成的证书的详细信息
利用“keytool -alias test -exportcert -keystore test.jks -file charleslai.cer”,导出证书,并可以双击打开证书查看证书信息
在spring boot中启动https和https://www.kuaiidc.com/tag/http2" title="http2">http2
将charleslai.jks复制到spring boot应用的resources目录下
在application.properties中配置证书及端口,密码填写第3步中的密码