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...