天天看點

如何實作HTTPS伺服器

如何實作HTTPS伺服器

到目前為止,我們編寫的Web伺服器,都是基于HTTP協定來實作的。

大家知道,HTTP協定是文本協定,而且是明文形式,很容易被嗅探竊聽或攻擊,安全性不太好。

其實,我們使用SpringBoot架構開發的基于HTTP的Web伺服器,不需要進行編碼修改,隻需要稍稍配置,就可以變成基于HTTPS的Web伺服器,極大提高系統的安全性。

我們還是從概念開始講起吧。

1、HTTP協定

HTTP,HyperText Transfer Protocol,超文本傳輸協定。

HTTP協定基于請求與響應在用戶端和伺服器端互動,HTTP是一種無狀态的協定;

HTTP協定是網際網路上應用最為廣泛的應用層傳輸協定,可以用于傳輸HTML檔案、圖檔、文本資訊,還可以用于查詢和修改伺服器上的資料。

基于HTTP協定的Web系統的協定棧如下圖所示:

如何實作HTTPS伺服器

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伺服器

下面我們用實際的例子,實作一個使用HTTPS的Web伺服器。

4、建立一個普通的Web伺服器

我們使用IDEA,基于SpringBoot建立一個普通的Web伺服器子產品secure_web,使用了Lombok與Spring Web依賴,建立後的代碼視圖如下:

如何實作HTTPS伺服器

5、建立controller包,添加ShowMessageController類

添加該類後,代碼視圖如下:

如何實作HTTPS伺服器

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

下面是指令執行情況:

如何實作HTTPS伺服器

将生成的secure_web.key檔案拷貝到resources目錄中:

如何實作HTTPS伺服器

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伺服器

在浏覽器中輸入 https://ip位址:8188/showMessage,浏覽器會給出告警資訊:

如何實作HTTPS伺服器

點選“進階”按鈕,然後點選“繼續前往<IP位址>(不安全)”:

如何實作HTTPS伺服器

将會得到從伺服器傳回的資訊(JSON格式):

如何實作HTTPS伺服器

根據浏覽器的提示資訊,我們确實實作了基于HTTPS的安全Web伺服器。