Spring Boot (六)web項目開發中的SSL配置

你好,【程序職場】專注於:Spring Boot ,微服務 和 前端APP開發,閒暇之餘一起聊聊職場規劃,個人成長,還能帶你一起探索 副業賺錢渠道,在提升技術的同時我們一起交流 敏捷流程 提高工作效率,從技術到管理一步步提升自我!
 
標籤:一個執着的職場程序員!

​本文是Spring Boot系列的第六篇,瞭解前面的文章有助於更好的理解本文:

1.Spring Boot(一)初識Spring Boot框架
2.Spring Boot(二)Spring Boot基本配置
3.Spring Boot(三)Spring Boot自動配置的原理
4.Spring Boot(四)Spring Boot web項目開發
5.Spring Boot(五)Spring Boot web開發項目(2)配置


前言

(一). 生成證書

(二). SSL配置

(三). http轉https

上篇文章爲大家講述了 Spring Boot的web項目開發 缺少了一部分配置功能;本篇文章接着上篇內容繼續爲大家介紹web項目開發的SSL功能。

SSL(安全套接字) 是爲網絡通訊提供安全及數據完整性的一種安全協議,SSL在網絡傳輸層對網絡進行加密。

SSL協議分成兩層:SSL記錄協議(SSL Record Protocol)他建立在可靠的傳輸協議之上 如:TCL,可爲高層協議提供數據封裝,壓縮,加密等基本操作,SSL握手協議(SSL Handshake Rrotocol)他建立在SSL協議之上,用於在實際數據傳輸開始前,通訊雙方進行身份認證,協商,加密算法,交換加密密鑰等。

在基於B/S的web開發中,是通過HTTPS來實現SSL的,HTTPS是以安全爲目標的HTTP通道,簡單講就是HTTP的安全版。

我們現在使用的都是TLS協議(Transport Layer Security,它來源於SSL),而不是SSL。

(一). 生成證書

使用SSL需要一個證書,這個證書可以是自簽名的,也可以是SSL證書授權中心獲得的,這裏我們只說 自授權證書的生成。

首先每一個JDK或者JRE都有一個工具叫keytool他是一個證書管理工具,可以生成自簽名證書。

控制檯輸入如下命令:

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

參數解釋:

1.-storetype 指定密鑰類型2.-keyalg 生證書的算法名稱,RSA是一種非對稱加密算法3.-keysize 證書大小4.-keystore 生成的證書文件的存儲路徑5.-validity 證書有效期

操作如下圖:
 

 

操作完成後 會在當前用戶目錄生成一個 keystore.p12文件

 

(二). SSL配置

上一步我們生成了自簽名文件,那麼我們需要配置一下 ,首先我們將自簽名文件拷貝到根目錄下(這個路徑可以修改,也可以是static下面)

 

然後在application.propetions中添加SSL配置,讓支持HTTPS,如下:

server.ssl.key-store=keystore.p12server.ssl.key-store-password=111111server.ssl.keyStoreType=PKCS12server.ssl.keyAlias:tomcat

參數解釋:
1. 指定簽名文件,2. 指定簽名密碼,3. 指定密鑰類型,4. 是別名。

OK,這樣配置完成之後我們就可以通過訪問看看效果了,這時候啓動項目 控制檯可以看出配置的https。

 

訪問效果如下:

 

 

(三). http轉https

很多時候,我們在輸入地址欄的是http,但是發現會自動轉向到https,比如訪問百度,就是這樣的情況,那麼我們實現這種https轉向https的功能,需要在入口類中添加轉向Bean 代碼如下:
 

// springboot2 寫法    @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(8081);        connector.setSecure(false);        //監聽到http的端口號後轉向到的https的端口號        connector.setRedirectPort(8443);        return connector;    }

這裏面的  Connector 是 Tomcat的Connector節點。

再次啓動項目,訪問http://localhost:8081 會自動轉到 https://localhost:8443 

ok,Spring Boot的web項目開發相關配置 到這裏就完成了,如果小夥伴還有疑問,可以 公衆號 加羣,我們一起進步

 

參考:
1. 圖解HTTPS https://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
2. 《JavaEE開發的顛覆者 Spring Boot實戰》

本案例下載地址:

https://github.com/ProceduralZC/itcxzc/tree/master/springboot_6

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章