目錄
概述
?申請/下載證書
部署證書
本地測試訪問
服務器部署訪問
?最后/擴展
總結
概述
本篇博客說明如何將SpringBoot項目開啟Https協議提供訪問。
博文以步驟【申請/下載證書】,【部署證書】,【本地測試訪問】,【服務器部署訪問】?,【擴展】展開說明。
廢話:當我們有類似需求:“小程序上線”后,請求的后端服務必須使用https協議,那么我們就需要去將http協議升級為https協議了。
https協議?大致可以看成:?
https協議 = http協議 + ssl協議
所以,要想將http升級成https很簡單,只需要有一個ssl證書,然后部署到項目即可。
前提準備:IPC備案過的域名
那么,如下就開始我們的說明。?
?申請/下載證書
我使用的是阿里云的服務器和域名,因此可以到阿里云官網搜索【ssl證書】進入【數字證書管理服務】控制臺。
?我們點擊【免費證書】--->【創建證書】--->【證書申請】
?輸入自己備案好的域名,其他基本默認,點擊【提交審核】。
審核基本上幾分鐘就可以下發證書,會有短信提示。
審核好后,我們就可以點擊【下載】,獲取我們的證書。?
?我使用的是SpringBoot項目做的測試,使用內置服務器Tomcat,因此直接下載Tomcat對應證書。
?下載的壓縮包內容:
?第一個是我們的證書,第二個是密碼文本文件(存儲密碼)。
部署證書
我創建了一個空的SpringBoot項目來做演示,寫了一個簡單的接口來測試:
?項目結構???
?IndexController(測試接口)
?
?1.將證書放到resources目錄下
?2.編寫配置文件application.yml
***key-store聲明證書的放置的路徑
?***請注意key-store-password填寫自己下載的壓縮包.txt文件里面的密碼
?到此,我們啟動項目即可。
本地測試訪問
我們使用Postman進行測試。
ps:當我們使用本地進行測試的時候,由于本地的IP與我們申請證書時添加的IP不一致,那么Postman會報錯IP不匹配,我們可以不用理會,點擊【Disable SSL Verification】關掉SSL驗證即可。
?成功。
服務器部署訪問
我們將SpringBoot項目打包,上傳到服務器, java -jar運行,然后Postman測試:?
?當然,我們也可以使用域名(申請證書時填寫的域名)進行訪問。
?最后/擴展
我們可能會有這樣的需求:
我們也許不是一開始做項目就部署了SSL證書,而是后期再部署SSL證書,那么我們在此之前前端項目使用的是http協議進行后端服務訪問,那么我們能不能不修改前端的代碼,想要http協議和https協議都能訪問呢?
這是可以的,我們可以將http協議的訪問重定向到https協議進行訪問即可。
這樣做后,我們后端服務跑起來的時候就會開啟兩個端口,一個http的端口,一個https的端口。
在啟動類中進行配置:
package com.mh;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;@SpringBootApplication
public class SslTestApplication {public static void main(String[] args) {SpringApplication.run(SslTestApplication.class, args);}@Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection securityCollection = new SecurityCollection();securityCollection.addPattern("/*");securityConstraint.addCollection(securityCollection);context.addConstraint(securityConstraint);}};factory.addAdditionalTomcatConnectors(httpConnector());return factory;}@Beanpublic Connector httpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");// http的端口connector.setPort(8080);connector.setSecure(false);// http的端口后轉向到的https的端口connector.setRedirectPort(443);return connector;}
}
當然,你也可以做配置類,我這里直接放到啟動類了,只要能將他們加到IOC容器即可生效。
?配置好后,我們再打包,重新放到服務器運行,瀏覽器測試:
回車后,自動跳轉訪問https
總結
開啟Https很簡單,總的來說只需要下載一個SSL證書進行部署即可。