利用keytool实现https协议(生成自签名证书)

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

相关推荐
软件技术员11 小时前
使用ACME自动签发SSL 证书
服务器·网络协议·ssl
我也要当昏君12 小时前
6.4 电子邮件 (答案见原书 P284)
网络协议
せいしゅん青春之我14 小时前
[JavaEE初阶]网络协议-状态码
java·网络协议·http
小蝈蝈啊15 小时前
HTTP相关知识点
网络协议·http·iphone
せいしゅん青春之我16 小时前
[JavaEE初阶]HTTPS-SSL传输过程中的加密
https·java-ee·ssl
任性不起来了16 小时前
宝塔面板点击ssl证书报错:出错了,面板运行时发生错误!ModuleNotFoundError: No module named ‘OpenSSL‘
网络·网络协议·ssl
2501_916007471 天前
iOS 混淆工具链实战,多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码混淆|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview
stark张宇1 天前
网络排错全流程:从DNS解析到防火墙,逐层拆解常见问题
linux·网络协议·dns
hour_go1 天前
TCP/IP协议相关知识点
网络·笔记·网络协议·tcp/ip