spring boot配置ssl实现HTTPS的方法

时间:2021-10-30 02:34:34

传输层安全性协议(英语:transport layer security,缩写作 tls),及其前身安全套接层(secure sockets layer,缩写作 ssl)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。网景公司(netscape)在1994年推出首版网页浏览器,网景导航者时,推出https协议,以ssl进行加密,这是ssl的起源。ietf将ssl进行标准化,1999年公布第一版tls标准文件。随后又公布rfc 5246 (2008年8月)与 rfc 6176 (2011年3月)。在浏览器、电子邮件、即时通信、voip、网络传真等应用程序中,广泛支持这个协议。主要的网站,如google、facebook等也以这个协议来创建安全连接,发送数据。目前已成为互联网上保密通信的工业标准。

ssl包含记录层(record layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用x.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

在配置tls/ssl之前我们需要拿到相应签名的证书,测试实例可以使用java 下面的 keytool 来生成证书:

打开控制台输入:

keytool -genkey -alias tomcat  -storetype pkcs12 -keyalg rsa -keysize 2048  -keystore keystore.p12 -validity 3650

spring boot配置ssl实现HTTPS的方法

这里的别名是 keystore.p12,密码什么的直接设置就好,然后回车

然后根据路径找到生成好的证书,把证书复制到项目里,我是放到了这里

spring boot配置ssl实现HTTPS的方法

放好证书后,建立一个index.html放到resources/templates文件夹下,一会用于测试。

再配置properties

?
1
2
3
4
5
6
7
8
server.port=8888
server.tomcat.uri-encoding=utf-8
server.servlet.context-path=/demo
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=123456
server.ssl.key-store-type=pkcs12
server.ssl.key-alias=tomcat
spring.thymeleaf.prefix=classpath:/templates/

配置好properties再加入下面的代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@configuration
public class httpsconfig {
 
  /**
   * spring boot 1.0
   */
  /* @bean
  public embeddedservletcontainerfactory servletcontainer() {
    tomcatembeddedservletcontainerfactory tomcat = new tomcatembeddedservletcontainerfactory() {
      @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;
  }*/
 
  /**
   * spring boot 2.0
   * @return
   */
  @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(8888);
    return connector;
  }
 
}
?
1
2
3
4
5
6
7
8
9
@controller
@requestmapping
public class viewcontrolller {
 
  @getmapping("index")
  public string index(){
    return "index";
  }
}

值得注意的是加入的springboot jar的版本不同代码有一定的改变,我这里用的是2.0的版本,还有就是要想跳转到html页面的时候一定注意的就是千万不要在controller中用@restcontroller而是要用controller,如果用restcontroller的话就会直接把你的index解析显示在页面当中,就不会跳转了,还有就是想要跳转的话一定要加入下面的两个jar包

?
1
2
3
4
5
6
7
8
9
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
  <version>2.0.1.release</version>
</dependency>
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-thymeleaf</artifactid>
</dependency>

准备完毕后启动项目,打印台显示

spring boot配置ssl实现HTTPS的方法

再输入:

127.0.0.1:8080/demo/index就会自动跳转

spring boot配置ssl实现HTTPS的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。