开始遇到这个问题时 是由于个人查看《Spring Boot实战》一书时遇到的,这本书当时以Spring Boot版本为1.3.0,个人自己使用的是Spring Boot 2.1.3版本,所以出现了一些问题 在这里做一下自己的解决方案。
http和https的概念:
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听
演示:
SSL证书如果有钱的话可以自己购买 以下是自签名SSL证书使用
(1)保证你的电脑装有JDK 进入到bin目录下会看到
(2)如果没有配置JAVA_HOME的电脑在命令行中进入到bin目录下,我自己安装路径是C:\Program Files\Java\jdk1.8.0_201\bin
我自己已经配置好了 下一步一样的的一步
keytool -genkey -alias tomcat -keyalg RSA (-keyalg RSA指定使用RSA算法 不指定默认DSA算法 但是我的使用默认时候出现了错误 不知道是不是版本问题 1.3.0的书籍上没有写,但是我用的2.1.3版本出错)
(3)上面命令执行后会在你当前目录下生成一个.keystore文件
(4)把.keystore文件放到你的工程根目录下
工程目录为springbootdemo02打开放进去 如下两图所示:
(5)配置全局
server.port=8443
server.ssl.key-store=.keystore
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
server.ssl.key-alias=tomcat
看到这里就应该明白上述的注释点了,
(6)在启动类里面写入下面代码(注意:这是SpringBoot 2.x版本的代码,如果你是1.x版本由于API的不同会报错)
@SpringBootApplication
public class Springbootdemo02Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo02Application.class, args);
}
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8443);
return connector;
}
}
(7)在src/main/resources/static下创建一个html文件
(8)启动项目
出现标红的一行说明项目启动成功
(9)页面测试 当你输入网址(http//)localhost:8080 时就会自动的跳转现实下面的网址
由于已经不是第一次启动的所以有一个警告界面没有
这里解释下红色横线的意思 造成出现的原因是因为你的SSL证书是自签名的 不是官方承认的