天天看點

Springboot配置使用ssl,使用https

  SSL(Secure Sockets Layer 安全套接層)是為網絡通信提供安全及資料完整性的一種安全協定,SSL在網絡傳輸層對網絡連接配接進行加密,SSL協定位于TCP/IP協定與各種應用層協定之間,為資料通信提供安全支援。SSL協定分為兩層,SSL記錄協定建立在TCP之上,為高層協定提供資料封裝、壓縮、加密等基本功能支援。SSL握手協定建立在SSL記錄協定之上,使用者實際資料傳輸開始前進行身份驗證、協商加密算法、交換加密秘鑰。

生成證書,可以使自簽名或者從SSL證書授權中心獲得的

  JDK中keytool是一個證書管理工具,可以生成自簽名證書。本人這裡用的系統是deepin,然後生成指令如下(找不到keytoo指令的先去配置java環境)我指定的名字叫tomcat.keystore 别名叫tomcat,密碼自己設定,我這裡用的tomcat,最後那個直接按得回車。

keytool -genkey -alias tomcat -keyalg RSA -keystore d:/test/tomcat.keystore      
Springboot配置使用ssl,使用https

2.SpringBoot配置SSL

 把tomcat.keystore拷貝到SpringBoot工程的 src/resources目錄下。配置application.properties

### https configuration
server.port=7443
server.ssl.key-store=d:/test/tomcat.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS      

此刻啟動項目,跳轉到 https://localhost:8443 。在運作主類裡面,加入如下代碼

package com.wx.weixin;

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;
import org.apache.catalina.Context;

@SpringBootApplication
public class WeixinApplication {

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

    @Bean
    public Connector connector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8082);
        connector.setSecure(false);
        connector.setRedirectPort(7443);
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @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(connector);
        return tomcat;
    }
}      
    一個知識點,你自己看懂了,那是一個層次;你會用,是另外一個層次;你寫出來,你寫出來讓别人懂,那又是更高的一個層次;你用最通俗的言語,把知識點講出來,讓别人一下子明白,又是更高的一個層次。

    如果您覺的本篇文章有用,可以贊助作者一些小額的比特币,用來買咖啡,謝謝。

收款位址:3NTPbsJKRKhe1RE1g2rZdr2dFTDgkBUgUa

注:轉載需注明出處及作者名,嚴禁惡意轉載,尊重原作者的勞動成果。