168. Spring Boot 使用SSL-HTTPS
Posted SpringBoot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了168. Spring Boot 使用SSL-HTTPS相关的知识,希望对你有一定的参考价值。
【视频&交流平台】
à SpringBoot视频
http://study.163.com/course/introduction.htm?courseId=1004329008
à SpringCloud视频
http://study.163.com/course/introduction.htm?courseId=1004638001
à Spring Boot源码
https://gitee.com/happyangellxq520/spring-boot
à Spring Boot交流平台
http://412887952-qq-com.iteye.com/blog/2321532
需求缘起:
原因1:有网友咨询,在spring boot中怎么使用https?
为保证数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用。避免影响正常使用中含有HTTP方式调用的服务,请开发者尽快调整,将现有通过HTTP方式调用的切换成HTTPS调用,平台将于2017年12月30日停止对HTTP方式调用的支持。
接口调用方式切换成HTTPS调用指导建议:
1.后台程序调用api.weixin.qq.com的接口,采用HTTPS方式,连接端口443,修改方法请自行查询各种编程语言对HTTPS的支持。
2.html页面对api.weixin.qq.com的URL访问,如果是HTTP方式,请直接指定HTTPS方式。
3.javascript等编程语言对api.weixin.qq.com的URL访问也请从HTTP方式改为HTTPS方式。
微信团队
2017年09月21日
原文链接:https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1505983913&version=5&lang=zh_CN
看来https要进入全网时代了,不了解是不行了。
本节大纲:
一、什么是SSL?
二、什么是HTTPS?
三、HTTPS与SSL的关系?
四、Spring Boot中使用HTTPS步骤
五、获取SSL证书
六、将HTTP请求重定向到HTTPS(可选)
七、总结
接下来看下本节的内容:
一、什么是SSL?
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
1.1 提供服务
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
二、什么是HTTPS?
HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。
以上资料参考《百度百科》
三、HTTPS与SSL的关系?
HTTPS与SSL的关系是包含与被包含的关系,简单来说,HTTPS=HTTP+SSL。也就是说HTTPS是在HTTP上面加了一层SSL协议,在HTTP站点上部署SSL数字证书就变成了HTTPS。
根据HTTPS与SSL的含义可以看出:SSL在HTTPS协议栈中负责实现上面提到的加密层。因此,一个HTTPS协议栈大致是这样的:
四、Spring Boot中使用HTTPS步骤
(1)要有一个SSL证书,证书怎么获取呢?买(通过证书授权机构购买)或者自己生成(通过keytool生成)。
(2)在spring boot中启用HTTPS
(3)将HTTP重定向到HTTPS(可选)
五、获取SSL证书
有两种方式可以获取到SSL证书:
(1)自己通过keytool生成;
(2)通过证书授权机构购买;
这里作为演示,采用keytool生成,实际项目中大部分采用的都是购买的方式。
那么怎么使用keytool生成呢?
Keytool是java提供的证书生成工具,如果配置了java_home的,直接就可以在控制台进行生成了,这里演示使用的是window的dos窗口:
(1)打开dos窗口;
(2)输入如下命令:
keytool -genkey -alias tomcat -dname "CN=Andy,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
这里解释下命令的各个参数的含义:
-genkey:生成key;
-alias:key的别名;
-dname:指定证书拥有者信息
-storetype:密钥库的类型为JCEKS。常用的有JKS(默认),JCEKS(推荐),PKCS12,BKS,UBER。每个密钥库只可以是其中一种类型。
-keyalg:DSA或RSA算法(当使用-genkeypair参数),DES或DESede或AES算法(当使用-genseckey参数);
-keysize:密钥的长度为512至1024之间(64的倍数)
-keystore :证书库的名称
-validity : 指定创建的证书有效期多少天
dname的值详解:
CN(Common Name名字与姓氏)
OU(Organization Unit组织单位名称)
O(Organization组织名称)
L(Locality城市或区域名称)
ST(State州或省份名称)
C(Country国家名称)
这时候在目录:C:\Users\Administrator下就会看到一个文件keystore.p12。到这里SSL证书就有了。
六、Spring Boot中启用HTTPS
默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,SpringBoot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些
在application.properties中配置HTTPS,配置信息如下:
#https端口号.
server.port: 443
#证书的路径.
server.ssl.key-store: classpath:keystore.p12
#证书密码,请修改为您自己证书的密码.
server.ssl.key-store-password: 123456
#秘钥库类型
server.ssl.keyStoreType: PKCS12
#证书别名
server.ssl.keyAlias: tomcat
注意:请将在上一步生成的证书放到src/main/resources目录下。
六、将HTTP请求重定向到HTTPS(可选)
上面说了不能同时在application.properties中同时配置两个connector,所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector,完整代码如下:
七、总结
在spring boot中要使用https的话,那么重要的就是几个步骤:
(1)备书:准备SSL证书,买或者生--(购买/自己生成)。
(2)配置:在application.properties配置HTTPS信息。
(3)重定向:将HTTP请求重定向到HTTPS(可选)。
以上是关于168. Spring Boot 使用SSL-HTTPS的主要内容,如果未能解决你的问题,请参考以下文章
在Spring Boot 上配置Redis Cluster出现的异常
elasticsearch在spring boot项目下的应用