Windows 环境下 Tomcat 部署 HTTPS 与 acme.sh 全自动续期实战指南
文章出处:Windows 环境下 Tomcat 部署 HTTPS 与 acme.sh 全自动续期实战指南
摘要
在 Web 服务中,HTTPS 加密通信是保障数据安全与提升用户信任的基础。本文详细记录了在 Windows 环境下,使用 acme.sh 为 Tomcat 服务器配置 HTTPS 证书并实现永久自动续期的完整流程。针对低版本的目标操作系统 Windows Server 2008 的特殊性,本文解决了 Git Bash 路径兼容、OpenSSL 版本过低以及 Tomcat 证书格式转换等核心痛点,提供了一套稳定、零维护的自动化解决方案。
一、 环境准备与 acme.sh 安装
在 Windows 环境下使用 acme.sh,推荐使用 Git Bash 作为命令行终端。由于 Windows 缺乏原生的 cron 定时任务机制,acme.sh 会自动调用 Windows 任务计划程序(Task Scheduler)来实现后台自动续期。
-
下载Git-2.37.1-64-bit.exe(兼容Windows Server 2008)
-
安装 acme.sh:下载acme.sh-master.zip并解压,定位到解压目录,在 Git Bash 中执行
./acme.sh --install -m your_email@example.com。 -
授权配置:安装过程中系统会提示输入 Windows 用户密码以创建后台计划任务。输入密码后,若日志提示
Successfully installed Windows scheduler task,即代表自动续期的基础环境配置成功。
二、 证书申请与 DNS 验证
以阿里云管理的域名oily.top为例子,需要申请阿里云RAM 访问控制AccessKey ID和AccessKey Secret,添加管理云解析(DNS)的权限AliyunDNSFullAccess。在git bash中执行以下命令
cd /c/Users/Administrator/.acme.sh #实际安装目录
export Ali_Key=阿里云KeyId
export Ali_Secret=阿里云Secret
./acme.sh --issue --dns dns_ali -d oily.top -d *.oily.top
成功后,从日志可以看出,泛域名证书(包含 oily.top 和 *.oily.top)已经成功签发,并且系统已经自动计算好了下一次的续期时间。
三、 解决 Windows 下的格式转换难题
Tomcat 无法直接读取 acme.sh 生成的 PEM 格式证书,必须将其转换为 PKCS12 (.pfx) 格式。由于 Git Bash 自带的 OpenSSL 版本过旧,不支持部分参数,且 JDK 的 keytool 对 PEM 文件的兼容性存在缺陷,最稳妥的方案是安装独立的新版 OpenSSL。
- 安装 OpenSSL:访问 OpenSSL for Windows 官方下载页:https://slproweb.com/products/Win32OpenSSL.html,从官方下载 Win64 版本的 OpenSSL 并安装(默认路径通常为
C:\Program Files\OpenSSL-Win64)。这里安装的是:Win64OpenSSL_Light-3_4_6.exe - 编写自动化转换脚本:在 Tomcat 的 SSL 目录(如
C:\apache-tomcat-9.0.115\ssl\)下创建auto_update.bat脚本,整合格式转换与服务重启逻辑:
@echo off
cd /d C:\apache-tomcat-9.0.115\ssl
:: 删除旧证书防止覆盖冲突(把oily.top替换为你域名)
if exist oily.top.pfx del /f /q oily.top.pfx
:: 使用 OpenSSL 将 PEM 转换为 PFX 格式
"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" pkcs12 -export -in fullchain.cer -inkey private.key -out oily.top.pfx -password pass:YourPassword
:: 安全重启 Tomcat 服务
call C:\apache-tomcat-9.0.115\bin\shutdown.bat
ping -n 6 127.0.0.1 >nul
call C:\apache-tomcat-9.0.115\bin\startup.bat
这里使用的是bat脚本重启tomcat,可以注册为服务,以服务方式重启。
四、 Tomcat 配置与 HTTPS 启用
在 conf/server.xml 文件中,取消 8443 端口 Connector 的注释,并配置 PFX 证书路径与密码。(端口改为443, 类型名改为certificateKeystoreType)
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:/apache-tomcat-9.0.115/ssl/oily.top.pfx"
certificateKeystorePassword="YourPassword" certificateKeystoreType="PKCS12" />
</SSLHostConfig>
</Connector>
注意:需要在阿里云后台打开443端口放行(TCP进入)权限。
五、 绑定自动续期与重载命令
将证书安装路径与自动化脚本绑定到 acme.sh,使其在证书到期前 30 天自动触发更新:
cd /c/Users/Administrator/.acme.sh
./acme.sh --install-cert -d oily.top \
--fullchain-file "C:/apache-tomcat-9.0.115/ssl/fullchain.cer" \
--key-file "C:/apache-tomcat-9.0.115/ssl/private.key" \
--reloadcmd "C:/apache-tomcat-9.0.115/ssl/auto_update.bat"
注意,需要创建ssl文件夹,auto_update.bat是自己创建的,用来转换证书为.pfx(tomcat使用),并且重启tomcat。脚本实现了自动续期,然后把新证书赋值到ssl目录,再执行auto_update.bat转换证书,并重启tomcat。
配置完成后,在git bash执行以上命令。若浏览器访问 https://oily.top 成功显示安全锁标识,即代表 HTTPS 部署成功。
在windows系统的任务计划程序->任务计划程序库中可见acme.sh.cron,每天检查证书过期情况。
尝试运行任务是否正确。需要修改acme.sh.cron 任务属性,纠正程序bash.exe的正确路径和参数。
如果要把http强制转换为https,进行以下设置。打开 C:\apache-tomcat-9.0.115\conf\server.xml,找到 80 端口的 <Connector>,添加一个 redirectPort="8443" 属性:(端口443)
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
打开 C:\apache-tomcat-9.0.115\conf\web.xml(注意:这是 Tomcat 全局的 web.xml,不是项目里的),在文件最底部的 </web-app> 标签之前,添加以下代码:
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
文章来源 奥利顶, www.oily.top, Oily
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)