SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通讯提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络链接进行加密。html
在B/SWeb的应用中,是经过Https实现SSL的,Https是http的安全版,Https的安全基础就是SSLjava
在Spring Boot中 tomcat是内置的,因此和SpringMvc实现Https(将证书配置到tomcat/conf/server.xml)的方式不一样。web
下面介绍如何在Spring Boot中实现Https spring
1:利用java JDK 自带工具 keytool 建立证书,建立证书这部分略过,可自行百度。apache
2:springboot配置SSLtomcat
添加一个index.html放入到src/main/resources/static下,做为测试安全
将keytool生成的.keystore文件复制到项目的根路径,而后在application.properties中作以下配置:springboot
server.port=8443 server.ssl.key-store=.keystore #建立证书时输入的密码 server.ssl.key-store-password=11111 server.ssl.keyStoreType=JKS server.ssl.keyAlias=tomcat
此时启动项目,访问:https:localhost:8443 就能够看到index.html了网络
3 http跳转到httpsapp
不少时候咱们输入http访问网站时例如百度,都会自动跳转到https上,要实现这个功能 咱们须要配置EmbeddedServletContainerFactory
package com.wisely.ch7_4; import java.util.concurrent.TimeUnit; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.ErrorPage; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; @SpringBootApplication public class Chapter511Application { public static void main(String[] args) { SpringApplication.run(Ch74Application.class, args); } @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } @Bean public Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; } }
此时启动项目,访问8080端口 会自动跳转到https 8443