到目前為止,我們編寫的Web伺服器,都是基于HTTP協定來實作的。
大家知道,HTTP協定是文本協定,而且是明文形式,很容易被嗅探竊聽或攻擊,安全性不太好。
其實,我們使用SpringBoot架構開發的基于HTTP的Web伺服器,不需要進行編碼修改,隻需要稍稍配置,就可以變成基于HTTPS的Web伺服器,極大提高系統的安全性。
我們還是從概念開始講起吧。
1、HTTP協定
HTTP,HyperText Transfer Protocol,超文本傳輸協定。
HTTP協定基于請求與響應在用戶端和伺服器端互動,HTTP是一種無狀态的協定;
HTTP協定是網際網路上應用最為廣泛的應用層傳輸協定,可以用于傳輸HTML檔案、圖檔、文本資訊,還可以用于查詢和修改伺服器上的資料。
基于HTTP協定的Web系統的協定棧如下圖所示:
2、SSL與TSL協定
SSL,Secure Sockets Layer,安全套接字協定;
TLS,Transport Layer Security,傳輸層安全協定;
TLS與SSL在傳輸層與應用層之間對網絡連接配接進行加密,為網絡通信提供安全及資料完整性。
3、HTTPS協定
HTTPS,Hyper Text Transfer Protocol over SecureSocket Layer,即HTTP over SSL,基于SSL的HTTP協定。
我們可以把HTTPS看作安全的HTTP協定。
基于HTTPS協定的Web系統的協定棧如下圖所示:
下面我們用實際的例子,實作一個使用HTTPS的Web伺服器。
4、建立一個普通的Web伺服器
我們使用IDEA,基于SpringBoot建立一個普通的Web伺服器子產品secure_web,使用了Lombok與Spring Web依賴,建立後的代碼視圖如下:
5、建立controller包,添加ShowMessageController類
添加該類後,代碼視圖如下:
ShowMessageController類的源代碼如下:
package com.flying.secure_web.controller;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ShowMessageController{
@Data
private static class WebData{
private int errorCode;
private String message;
}
@GetMapping("/showMessage")
public WebData showMessage(){
WebData webData = new WebData();
webData.setErrorCode(0);
webData.setMessage("success");
return webData;
}
}
6、生成數字證書
JDK提供了一個keytool工具,可以生成數字證書。
我們執行下面的指令,生成一個secure_web.key證書檔案,該證書檔案有效期為30天,使用RSA算法,密鑰長度為2048,别名為secure_web:
keytool -genkey -alias secure_web -keyalg RSA -keysize 2048 -keystore secure_web.key -validity 30
輸入指令時,設定密碼為888888
下面是指令執行情況:
将生成的secure_web.key檔案拷貝到resources目錄中:
7、配置Web伺服器的HTTPS相關屬性
修改application.properties檔案,添加HTTPS相關的屬性。修改後的application.properties檔案内容如下:
server.port=8188
server.ssl.key-store=resources/secure_web.key
server.ssl.key-alias=secure_web
server.ssl.key-store-password=888888
這四個配置項分别是Web服務的監聽端口,數字證書檔案名,生成證書時輸入的别名和密碼。
8、運作與測試
對程式編譯,得到secure_web.jar軟體,運作該程式:
在浏覽器中輸入 https://ip位址:8188/showMessage,浏覽器會給出告警資訊:
點選“進階”按鈕,然後點選“繼續前往<IP位址>(不安全)”:
将會得到從伺服器傳回的資訊(JSON格式):
根據浏覽器的提示資訊,我們确實實作了基于HTTPS的安全Web伺服器。