Springboot整合https原來這麼簡單

2021-10-05 12:11:40 字數 4023 閱讀 4573

http是不安全的,我們需要給它套上ssl,讓它變成https。本文章將用例項介紹springboot整合https

要談https就要談security,自然就要談安全;談及安全,就必然涉及密碼學的一些知識。

要建立乙個密碼體制,需要由五個空間組成,分別是:

如圖所示:

對稱加密,或者也叫單鑰加密,是指加密金鑰和解密金鑰相同(或者容易由乙個計算出另乙個)的加密方式。

對稱加密的主要優勢是:加密、解密運算速度快,效率高;

侷限性:金鑰分發複雜,金鑰管理困難,保密通訊系統開放性差,數字簽名;

代表演算法:des演算法、aes演算法;

舉個小例子

明文為48,加密演算法f(x)=8x+71,

則密文c=8*48+71=455

則解密演算法為f(x)=(x-71)/8;

則解密後的明文m=(455-71)/8=48;

非對稱加密是指加密和解密分別使用不同的金鑰,並且不能由加密金鑰推導出解密金鑰的加密方式。

主要優勢:金鑰分配簡單,便於管理,系統開放性好,可以實現數字簽名;

侷限性:加密、解密運算效率較低;

代表演算法:rsa演算法、ecc演算法;

舉個大例子

步驟如下:

step

description

formula

note

1找出兩個質數

p、q2

計算公共模數

n=p*q

3計算尤拉函式

φ(n) = (p-1)(q-1)

4計算公鑰e

1 < e < φ(n)

e的取值必須是整數 e 和 φ(n) 必須是互質數

5計算私鑰d

e * d % φ(n) = 16加密

c = m^e mod n

c:密文 m:明文7解密

m =c^d mod n

c:密文 m:明文

其中,公鑰=(e , n) ,私鑰=(d, n),對外,我們只暴露公鑰。

1.找出兩個質數

隨便找兩個質數,我們找p=5,q=11。

2.計算公共模數

公共模數n=p*q=5*11=55

3.計算尤拉函式

φ(n) = (p-1)(q-1)=4*10=40

4.計算公鑰e

1 < e < φ(n),我們取e=13

5.計算私鑰d

(13*d)%40=1,則取d=37

6.加密

假設要傳輸的明文為8,使用公鑰(e,n)=(13,55)加密

通過公式c = m^e mod n=8^13%55=28

7.解密

使用金鑰(d,n)=(37,55)解密

解密m =c^d mod n=28^37%55=8

另外,我們可以用私鑰加密,公鑰解密,

如明文為2,則用私鑰(37,55)加密密文c=(2^37)%55=7

用公鑰(13,55)解密m=(7^13)%55=2。

至此,整個非對稱加密過程演示了一遍,希望大家能理解,特別是非對稱加密,因為https使用的是非對稱加密。實際的使用演算法更複雜,金鑰長度會更大。

要使用ssl,需要有證書,這個證書檔案是包含公鑰金鑰,也就是非對稱加密中要使用的。

獲取證書有兩種方式:

為方便起見,在本次例項中使用自簽證書,兩種證書整合過程並無差異。

作為乙個web應用,我們先讓它跑起來,然後再整合https

(1)引入web依賴:

org.springframework.boot

spring-boot-starter-web

(2)配置埠:

server.port=80
(3)實現contrlloer

@restcontroller

public class hellocontroller

}

完成上面工作後,啟動應用即可。

訪問http://localhost/hello 得到下面結果,說明整個web應用起來了。

通過命令列生成金鑰檔案如下:

keytool -genkey -alias localhost -keyalg rsa -keysize 2048 -sigalg sha256withrsa -keystore localhost.jks -dname cn=localhost,ou=test,o=pkslow,l=guangzhou,c=cn -validity 731 -storepass changeit -keypass changeit
命令列重要引數的意義:

執行完以上命令後,就會生成localhost.jks檔案,把該檔案放到classpath下即可,當然也可以放到其它位置,配置檔案指定正確即可。

server.port=443

server.ssl.enabled=true

server.ssl.key-store-type=jks

server.ssl.key-store=classpath:localhost.jks

server.ssl.key-store-password=changeit

server.ssl.key-alias=localhost

重啟後訪問如下:

發現有紅色警告,因為這是自簽名的cert,並不被chrome所認可,所以會校驗失敗。以前的chrome版本只是警告,但還是可以訪問的,現在新版本的已經不能訪問了。

通過postman來訪問便可:

生成金鑰:

keytool -genkey -alias localhost -keyalg rsa -keysize 2048 -sigalg sha256withrsa -storetype pkcs12 -keystore localhost.p12 -dname cn=localhost,ou=test,o=pkslow,l=guangzhou,c=cn -validity 731 -storepass changeit -keypass changeit
配置檔案如下:

server.port=443

server.ssl.enabled=true

server.ssl.key-store-type=pkcs12

server.ssl.key-store=classpath:localhost.p12

server.ssl.key-store-password=changeit

server.ssl.key-alias=localhost

其實,ssl非常複雜,知識點非常多。後續文章會繼續介紹金鑰工具、重定向、reactive整合、雙向驗證等。

多讀書,多分享;多寫作,多整理。

springBoot整合dubbo整合專案

傳統spring 整合dubbo,需要繁瑣的編寫一堆堆的 xml 配置檔案 而springboot整合dubbo後,不在需要寫 xml,通過jar包引用,完 成整合,通過註解的形式完成配置。提高我們的開發效率 目錄結構 1 服務層生產者開發 hs ldm server service 1.1新增du...

SpringBoot整合系列 整合Swagger2

io.springfox springfox swagger2 2.7.0 io.springfox springfox swagger ui 2.7.0 一般無配置項,必要時可以新增自定義配置項,在配置類中讀取 swagger2的配置內容僅僅就是需要建立乙個docket例項 configurati...

SpringBoot整合PageHelper外掛程式

springboot整合pagehelper外掛程式的時候主要分為以下幾步?1.在pom.xml中引入依賴 com.github.pagehelper pagehelper spring boot starter 1.2.3 分頁外掛程式 pagehelper.helperdialect mysql...