SpringBoot2.x版本最详细的演示ssl自签名证书实现网页地址http转换到https

首先个人提一下原因:开始遇到这个问题时 是由于个人查看《Spring Boot实战》一书时遇到的,这本书当时以Spring Boot版本为1.3.0,个人自己使用的是Spring Boot 2.1.3版本,所以出现了一些问题 在这里做一下自己的解决方案。

http和https的概念和区别(网上一大堆):

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证书是自签名的 不是官方承认的

猜你喜欢

转载自blog.csdn.net/qq_38100492/article/details/89140460