4 ssm项目配置https

目录

[4 ssm项目配置https](#4 ssm项目配置https)

[4.1 介绍](#4.1 介绍)

[4.2 配置流程](#4.2 配置流程)

[4.3 注](#4.3 注)


4 ssm项目配置https

4.1 介绍

以前访问自己写的项目,配置的路径都是http开头的。

以snapan上传文件(文件存储在oss)为例,解释为什么需要配置https。
通过 Spring MVC 的MultipartFile接收分片文件,基于HTTP/1.1 或 HTTP/2 协议,底层使用TCP Socket(由 Servlet 容器如 Tomcat 管理)。
当前的项目部署在 http://localhost:8080/(HTTP 协议),前端与后端之间的传输没有加密,抓包软件能直接捕获明文数据,不安全。
能抓到的部分:前端与后端之间的所有明文数据,包括:

  • 上传时的文件分片、fileMD5、chunkIndex 等参数;
  • 下载时的文件 ID、请求头信息;
  • UploadController 接收的文件原始数据(如图片二进制流)。
    但是如果我使用https协议(TLS/SSL 加密),抓包软件只能看到发送的 HTTPS 请求(IP、端口),但无法解析请求体中的文件数据、签名信息(TLS/SSL 加密保护)。
    这个snapan项目,后端和 OSS 有交互。无论前端请求是 HTTP 还是 HTTPS,后端调用阿里云 OSS SDK 上传 / 下载文件时,默认使用 HTTPS 协议(TLS/SSL 加密),这是 OSS SDK 的强制配置,与前端请求协议无关。
    此时这个项目里,只有后端到oss是加密的,前端到后端没有加密依旧不安全,如果要安全传输就需要让前端到后端的传输使用的是https协议。

4.2 配置流程

目的:浏览器↔后端加密。让服务支持 https://localhost:8443/ 访问,浏览器和后端的所有上传请求都加密,抓包无法获取明文。

  1. 生成 HTTPS 证书(本地测试用,本地测试用自签名证书,生产用 CA 证书)
    打开命令行,输入以下命令(需要 JDK 的 keytool 工具,默认随 JDK 安装):

    keytool -genkeypair -alias myhttps -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 3650

  • 按提示输入信息(全程可填简单值,方便记忆):
  • 输入密钥库口令:比如 123456(后续配置要用到,记好)
  • 姓氏:随便填(如 snapan)
  • 组织单位、组织、城市、省份、国家代码:都随便填(如 snapan、CN)
  • 确认信息:输入 y
  • 密钥口令:直接回车(和密钥库口令一致)
  • 执行完后,会在命令行当前目录生成 keystore.jks 证书文件。
  1. 放置证书
    SSM 项目部署在独立 Tomcat 中,证书要放 Tomcat 的配置目录:
  • 找到你部署 SSM 项目的 Tomcat 安装目录(比如 D:\tomcat-8.5.29)
  • 进入 tomcat/conf 目录(存放 Tomcat 核心配置的文件夹)
  • 把生成的 keystore.jks 文件,复制到 tomcat/conf 目录下(和 server.xml 同级)。
  1. 配置 Tomcat 的server.xml
    打开 Tomcat 目录下的 conf/server.xml 文件,找到并修改 HTTPS 相关配置(默认被注释,解开后改参数):
    (1)找到原 HTTPS 配置(默认注释,长这样)

(2)替换为以下配置

复制代码
<!-- SSM项目HTTPS配置:端口8443,关联我们生成的证书 -->
<Connector 
    port="8443"  <!-- HTTPS端口,和之前一致,避免冲突 -->
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" 
    SSLEnabled="true"  <!-- 启用SSL -->
    scheme="https"  <!-- 协议类型为HTTPS -->
    secure="true"  <!-- 标记为安全连接 -->
    clientAuth="false"  <!-- 不需要客户端证书(本地测试用) -->
    sslProtocol="TLS"  <!-- 加密协议,支持TLSv1.2/TLSv1.3 -->
    keystoreFile="conf/keystore.jks"  <!-- 证书路径:Tomcat的conf目录下的keystore.jks -->
    keystorePass="123456"  <!-- 证书密码(生成时填的123456) -->
    keystoreType="JKS"  <!-- 证书类型(默认JKS,不用改) -->
    keyAlias="snapanhttps"  <!-- 生成证书时的alias(和命令行一致) -->
/>
  1. 新建 rewrite.config 文件
    在 tomcat/conf 目录下新建 rewrite.config 文件,写入:

    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*) https://%{HTTP_HOST}:84431 [R,L]

  1. 配置idea中的Tomcat
  2. 启动项目
    此时会出现这个弹框,点接受。
    因为idea不信任你用的自签名证书,但这说明你的 HTTPS 配置已经成功生效了。
    具体解释如下:
  • 提示的本质:
    上面用的是keytool生成的是自签名证书(自己给自己发的 "加密身份证"),而不是由权威 CA 机构(比如阿里云、Let's Encrypt)颁发的证书。浏览器 / IDEA 默认只信任权威 CA 的证书,所以会弹出 "证书不受信任" 的提示,但这是本地测试的正常现象,不影响功能。
  • 如何判断 HTTPS 已经生效?
    出现这个提示,恰恰说明:
    我的 Tomcat 已经成功启用了 HTTPS(否则不会触发证书验证);
    通信链路已经是加密的(抓包工具只能看到密文)。
  • 下一步操作:
    点击弹窗右下角的 Accept 按钮,信任这个自签名证书,之后 IDEA 就不会再弹出这个提示,你可以正常通过 HTTPS 访问项目了。
  1. 浏览器访问
    此时会出现这个,点击高级。
    这个提示是浏览器对 "自签名证书" 的安全警告,和之前 IDEA 的提示是同一个原因,但不代表 HTTPS 没生效 ------ 实际上你的加密配置已经成功了,只是浏览器默认不信任自己生成的证书。
    具体如下:
    浏览器显示 "你的连接不是专用连接"+NET::ERR_CERT_AUTHORITY_INVALID,是因为:
  • 用keytool生成的证书,没有经过 ** 权威 CA 机构(如 Let's Encrypt、阿里云)** 的签名,浏览器默认会标记为 "不安全";
  • 但通信本身已经是加密的(抓包工具只能看到密文,无法解析内容),这个警告只是 "证书来源不可信" 的提示,不是加密失败。
  1. 继续访问
    点击继续访问localhost就可以看到页面了。
  2. 浏览器页面显示
    现在地址栏显示的是https://(只是带了 "不安全" 警告),这说明浏览器已经和你的服务建立了TLS 加密连接------ 因为只有 HTTPS 才会用https://前缀,HTTP 不会。
    这个 "不安全" 警告只是针对证书的来源(自签名证书),不是针对加密本身。通信链路已经是加密的(数据不会被明文抓包),只是浏览器觉得 "这个证书不是权威机构发的,可能有风险",但本地测试完全可以忽略。

4.3 注

如果是SpringBoot项目,内置了 Tomcat,就只用在application.yml里面修改配置文件,证书放在项目里。其他逻辑和ssm一样。

相关推荐
Macbethad3 小时前
EtherCAT从站程序技术方案:基于WPF的高性能实现
网络协议·wpf
Macbethad3 小时前
基于WPF的485主站系统技术方案
网络协议·wpf·信息与通信
Macbethad11 小时前
Profinet主站程序技术方案
网络协议·信息与通信
多看书少吃饭13 小时前
小程序支持HTTP POST 流式接口吗?
网络协议·http·小程序
陈奕昆13 小时前
n8n实战营Day2:复杂逻辑控制·HTTP请求+条件分支节点实操
网络·人工智能·python·网络协议·n8n
unclecss13 小时前
从 0 到 1 落地 SSE:Spring Boot 3 实战 Server-Sent Events 推送全链路
java·spring boot·后端·http·sse
Han.miracle13 小时前
JavaEE-- 网络编程 http请求报头
运维·服务器·网络·网络协议·计算机网络·http
云边有个稻草人14 小时前
不用公网 IP 也能远程管 MongoDB?本地部署 + cpolar实用方案
网络协议·mongodb·cpolar
googleccsdn17 小时前
ENSP Pro Lab笔记:配置STP/RSTP/MSTP(7)
网络·笔记·网络协议