到目前為止,我們編寫的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服務器。