Spring Boot配置ssl證書啓用HTTPS協議

一 、點睛

SSL是爲網絡通訊提供安全及數據完整性的一種安全協議,SSL在網絡傳輸層對網絡鏈接進行加密。SSL協議位於TCP/IP協議和各類應用層協議之間,爲數據通訊提供安全支持。

SSL協議分爲兩層:SSL記錄協議,它創建在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議,它創建在SSL記錄協議之上。用於在實際數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。java

基於B/S的Web應用中,是經過HTTPS來實現SSL的。HTTPS是以安全爲目標的HTTP通訊,簡單講是HTTP的安全版,即在HTTP下加入SSL層,HTTPS的安全基礎是SSL。
web

2、用JDK中keytool生成自帶簽名證書

使用SSL首先須要一個證書,這個證書既能夠是自簽名的,也能夠是從SSL證書受權中心得到的。本案例演示自簽名證書的生成。算法

JDK或JRE中的keytool工具是一個證書管理工具,能夠用來生成自簽名證書。spring

在命令行輸入如下內容apache

此時生成一個.keystore文件,這就是咱們要用的證書文件瀏覽器

3、將.keystore證書文件(複製到項目的application.properties同級目錄tomcat

4、修改Spring Boot的application.properties

5、修改啓動類,讓http重定向到https

XXXApplication.java安全

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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
網絡

@SpringBootApplicationapp

public class WebchatApplication  {

   public static void main(String[] args) {
      SpringApplication.run(WebchatApplication.class, args);
   }

   /**
    * http重定向到https
    * @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(8044);
      return connector;
   }
}

啓動成功後,打開Chrome瀏覽器,輸入SpringBoot的URL映射,能夠看到彈出了證書不安全的提示,單擊【高級】-->【繼續前往】便可正常打開網址連接了。

注意:因爲JDK生成的自簽名證書沒有通過CA機構認證,因此會提示不安全。

相關文章
相關標籤/搜索