文章出处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_emailexample.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#实际安装目录exportAli_Key阿里云KeyIdexportAli_Secret阿里云Secret ./acme.sh--issue--dnsdns_ali-doily.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, 类型名改为certificateKeystoreTypeConnectorport443protocolorg.apache.coyote.http11.Http11NioProtocolmaxThreads150SSLEnabledtruemaxParameterCount1000SSLHostConfigCertificatecertificateKeystoreFileC:/apache-tomcat-9.0.115/ssl/oily.top.pfxcertificateKeystorePasswordYourPasswordcertificateKeystoreTypePKCS12//SSLHostConfig/Connector注意需要在阿里云后台打开443端口放行TCP进入权限。五、 绑定自动续期与重载命令将证书安装路径与自动化脚本绑定到acme.sh使其在证书到期前 30 天自动触发更新cd/c/Users/Administrator/.acme.sh ./acme.sh --install-cert-doily.top\--fullchain-fileC:/apache-tomcat-9.0.115/ssl/fullchain.cer\--key-fileC:/apache-tomcat-9.0.115/ssl/private.key\--reloadcmdC:/apache-tomcat-9.0.115/ssl/auto_update.bat注意需要创建ssl文件夹auto_update.bat是自己创建的用来转换证书为.pfxtomcat使用并且重启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添加一个redirectPort8443属性端口443Connector port80 protocolHTTP/1.1 connectionTimeout20000 redirectPort443 /打开C:\apache-tomcat-9.0.115\conf\web.xml注意这是 Tomcat 全局的 web.xml不是项目里的在文件最底部的/web-app标签之前添加以下代码security-constraint web-resource-collection web-resource-nameHTTPSOnly/web-resource-name url-pattern/*/url-pattern /web-resource-collection user-data-constraint transport-guaranteeCONFIDENTIAL/transport-guarantee /user-data-constraint /security-constraint文章来源 奥利顶, www.oily.top, Oily