利用keytool實現https協議(生成自簽名證書)
什么是https協議?
https(安全超文本傳輸協議)是 HTTP 的安全版本,通過 SSL/TLS 加密技術,在客戶端(如瀏覽器)和服務器之間建立加密通信通道,確保數據傳輸的機密性、完整性和身份真實性。
與http的區別:
特性 | HTTP | HTTPS |
加密 | ? 明文傳輸,數據可被竊聽 | ? 加密傳輸(SSL/TLS),防竊聽 |
數據完整性 | ? 數據可被篡改(中間人攻擊) | ? 校驗機制防止篡改 |
身份驗證 | ? 無法驗證服務器身份 | ? 證書驗證服務器真實性(防釣魚) |
性能 | ? 更快(無加密開銷) | ? 稍慢(加密/解密消耗資源) |
SEO 影響 | ? 搜索引擎排名可能降低 | ? 谷歌等優先收錄 HTTPS 網站 |
協議層 | 應用層協議 | HTTP + SSL/TLS(傳輸層安全) |
HTTPS 如何工作?
1、SSL/TLS 握手
客戶端訪問 HTTPS 網站時,服務器發送數字證書(含公鑰)。
瀏覽器驗證證書有效性(如頒發機構、過期時間、域名匹配)。
2、密鑰交換
通過非對稱加密(如 RSA)協商一個臨時對稱密鑰。
3、加密通信
后續數據傳輸使用對稱加密(如 AES),保證效率和安全。
那么如何實現將http變為安全的https協議?
生成自簽名證書(開發環境適用)
使用 keytool(Java 自帶工具)
一、交互式輸入:
在后端項目終端中輸入
keytool -genkeypair -alias yourdomain -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365 -storetype PKCS12
接著往下輸入信息即可。
在 Vue + Spring Boot 項目中啟用 HTTPS,需要生成 SSL/TLS 證書(如自簽名證書或 CA 簽名證書)。以下是詳細步驟:
參數說明:
- -alias yourdomain:證書別名(可自定義)。
- -keyalg RSA:加密算法(推薦 RSA 或 ECC)。
- -keysize 2048:密鑰長度(至少 2048 位)。
- -keystore keystore.p12:生成的密鑰庫文件名。
- -validity 365:證書有效期(天)。
- -storetype PKCS12:密鑰庫格式(推薦 PKCS12,兼容性強)。
二、不交互式
keytool -genkeypair -alias yourdomain -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365 -storetype PKCS12 -dname "CN=localhost, OU=YourDept, O=YourOrg, L=Beijing, ST=Beijing, C=CN" -storepass yourpassword
其中CN=localhost為地址, 將yourpassword? 改為密碼,
結束后會出現一個文件:
keystore.p12
將其移動到resources文件夾下,
在application.properties配置里寫:
server.ssl.enabled=true#文件位置
server.ssl.key-store=classpath:keystore.p12#密碼? 注意要和之前設置的一致
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
最后重啟springboot項目,
在前端的項目里(我的是vue項目),
在跨域中設置:
module.exports = {devServer: {proxy: {'/api': {//注意這里要用https,否則會報錯target: 'https://localhost:9000',changeOrigin: true,secure: false, // 忽略自簽名證書pathRewrite: { '^/api': '' }}}}}
前端做一個請求,在后端查看日志:
可以看到已經是https協議了。。。