前言
在现代网络应用中,HTTPS 不仅是安全的保障,也常常成为应用上线的必要条件。本地开发环境中,使项目接口支持 HTTPS 访问,可以提前适应安全规范,避免后期的麻烦。
准备
java环境 由于我们使用的是java自带的 keytool工具java 生成根证书 环境是必须的
实战
自签名证书 (浏览器访问会提示不安全)
生成 https证书
# alias 别名 keystore 存储文件名称 storepass 存储密码 validity 有效期(天数)
keytool -genkeypair -alias test -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore test.p12 -validity 3650 -storepass 123456
# 执行后将会生成 一个 test.p12的文件 有效期10年
将生成test.p12文件 复制到项目的 resource目录下
springboot项目中新增配置
server:
# https的默认端口
port: 8443
ssl:
# 注意 使用配置的值 来自上述生成证书的配置
key-alias: test
key-store-type: PKCS12
#key-password: 123456
key-store-password: 123456
key-store: classpath:test.p12
启动项目 观察日志 Tomcat started on port 8443 (https)
2024-05-28T16:12:26.684+08:00 INFO 50192 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8443 (https) with context path '/'
后续项目中的接口 即可通过 https 进行访问
由于我们使用的是自签名证书 在使用https访问时 会提示 网站不安全
关闭提示后 接口访问
使用可以信任的 证书(可选)
如果要避免浏览器的安全警告,可以购买并配置一个由受信任的证书颁发机构签发的证书。具体步骤因证书提供商而异,但大致流程是:
生成证书签名请求文件
将请求文件提交给证书颁发机构
下载获得的证书文件
在 application.properties 中配置证书文件路径
使用可信证书后,浏览器就可以正常访问应用程序的 HTTPS 服务,不会出现安全警告了。
另一种方案 使用花生壳 做内网穿透 反向代理自己的服务端口 即可内部使用https 访问接口
扩展阅读
什么是 HTTPS?
HTTPS(全称为 HyperText Transfer Protocol Secure)是一种安全的通信协议,它在传统的HTTP协议上增加了SSL/TLS协议层,用于在客户端和服务器之间建立一个加密的通信通道,确保数据传输的安全性和完整性。HTTPS 能够防止数据在传输过程中被窃听或篡改,是互联网上安全通信的行业标准。
HTTPS 的重要性
加密:HTTPS 使用 SSL/TLS 对数据进行加密,保护了数据内容不被第三方截获和解读。
身份验证:通过使用证书,HTTPS 能够验证服务器的身份,防止中间人攻击(MITM)。
数据完整性:确保数据在传输过程中未被篡改。
隐私保护:用户访问网站的行为不被第三方跟踪和记录。
HTTPS 的工作原理
TLS 握手:当用户通过 HTTPS 访问网站时,浏览器和服务器之间会进行 TLS 握手过程,协商加密算法、交换加密密钥。
证书验证:服务器向浏览器提供 SSL 证书,浏览器验证证书的有效性,包括证书颁发机构、证书所有者和证书的有效期。
加密通信:一旦证书验证通过,浏览器和服务器将使用协商的加密算法和密钥进行加密通信。
总结
通过上述步骤,我们可以轻松地为 Spring Boot 应用配置 HTTPS 支持。无论是使用自签名证书还是购买可信证书,都能满足开发和测试的需求。此外,利用内网穿透工具可以更简单地实现公网 HTTPS 访问。