利用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协议了。。。