你好,【程序職場】專注於: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.p12
server.ssl.key-store-password=111111
server.ssl.keyStoreType=PKCS12
server.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