本篇文章主要介绍了详解 spring boot 配置 ssl, 小编觉得挺不错的, 现在分享给大家, 也给大家做个参考一起跟随小编过来看看吧
ssl 协议位于 tcp/ip 协议与各种应用协议之间, 为数据通信提供安全支持
ssl 协议分为两层:
ssl 记录协议, 它建立在可靠传输协议之上, 为高层协议提供数据封装压缩加密等基本功能支持
ssl 握手协议, 它建立在 ssl 记录协议之上, 用于实际数据传输开始前, 通信双方进行身份认证协商加密算法交换加密密钥等
基于 B/S 的 web 应用, 是通过 https 来实现 ssl 的 https 是 http 的安全版, 即在 http 下加入 ssl 层, https 的安全基础是 ssl;
我们开始在 spring boot 中使用 ssl 设置;
1. 生成证书
每一个 jdk 或者 jre 中都有一个工具叫 keytool, 它是一个证书管理工具, 可以用来生成自签名的证书; 打开 cmd, 进入 jdk/bin 路径, 敲入命令
keytool -genkey -alias tomcat
在用户路径下生成 .keystore 文件 , 这就是我们要使用的证书文件
2.spring boot 配置 ssl
将. keystore 文件复制到项目根目录, 然后配置 application.properties 中做 ssl 配置
server.ssl.key-store=.keystore
server.ssl.key-store-password = 密码
- server.ssl.keyStoreType = JKS
- server.ssl.keyAlias=tomcat
启动项目
访问地址 https://localhost:8080
3http 转 https
要实现这个功能, 我们需要配置 TomcatEmbeddedServletContainerFactory, 并且添加 tomcat 的 connector 来实现
- package com.example;
- 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.tomcat.TomcatEmbeddedServletContainerFactory;
- import org.springframework.boot.web.servlet.ErrorPage;
- import org.springframework.context.annotation.Bean;
- import org.springframework.http.HttpStatus;
- import org.springframework.stereotype.Component;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.servlet.config.annotation.EnableWebMvc;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.TimeUnit;
- /**
- * Created by xingzhuipingye on 2017/5/7.
- */
- @Controller
- @SpringBootApplication
- public class ApplicationMy {
- @RequestMapping("/")
- public String index(Model model){
- Person single = new Person("aa",11);
- List<Person> list = new ArrayList<>();
- Person p1 = new Person("xx",11);
- Person p2 = new Person("yy",22);
- Person p3 = new Person("zz",33);
- list.add(p1);
- list.add(p2);
- list.add(p3);
- model.addAttribute("singlePerson",single);
- model.addAttribute("people",list);
- return "index";
- }
- public static void main(String[] args){
- SpringApplication.run(ApplicationMy.class);
- }
- @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(8088);
- return connector;
- }
- }
注: 我在 application.properties 中修改了端口为 8088
此时我们访问 http://localhost:8080 就会跳转到 https://localhost:8088
来源: http://www.phperz.com/article/18/0318/357142.html