unnamed.jpg

📌 前言

在 Windows 服务器上使用 PhpStudy 建站非常方便,但 SSL 证书的维护一直是个痛点:

  1. 手动续签麻烦:免费证书通常只有 3 个月有效期,过期忘记续签会导致网站“红锁”报警。
  2. 子域名多:如果有 api.xxx.comadmin.xxx.com 等多个子域名,一个个申请证书非常繁琐。
  3. 自动化难:PhpStudy 面板自带的 SSL 功能有时不够灵活,且重启服务容易失败。

本文将介绍如何使用 Win-ACME 配合 Let's Encrypt,申请 泛域名 (Wildcard) 证书,并实现全自动续签和 Apache 服务的自动重载。

🛠️ 环境准备

  • 操作系统:Windows Server 2012 R2 / 2016 / 2019 / 2022
  • Web环境:PhpStudy Pro (Apache 2.4.x)
  • 核心工具Win-ACME (建议下载 x64.pluggable 版本)
  • 域名解析:建议使用 Cloudflare、阿里云、腾讯云等支持 API 的 DNS 服务商(用于自动验证域名所有权)。

📂 第一步:规划目录

为了方便管理和自动化,我们需要规范路径(请根据实际情况修改盘符):

  1. 工具目录:解压 Win-ACME 到 D:\win-acme\
  2. 证书目录:在 Apache 配置目录下新建 ssl_certs 文件夹。
  3. 例如:D:\phpstudy_pro\Extensions\Apache2.4.39\conf\ssl_certs\

⚡ 第二步:申请泛域名证书

以管理员身份运行 wacs.exe,按照以下步骤操作(不同版本菜单略有差异,认准关键词):

  1. 选择模式:输入 M (Create certificate in full options)。
  2. 输入域名:输入 2 (Manual input)。
  3. 填写:*.yourdomain.com (将 yourdomain.com 替换为你的真实域名)。
  4. 域名别名:直接回车(默认)。
  5. 验证方式:选择 [dns-01] 验证。
  6. 根据你的 DNS 服务商选择(如 Cloudflare, Aliyun 等)。
  7. 按照提示输入 API Token(为了安全,建议去 DNS 服务商后台申请仅有 DNS 编辑权限的 Token)。
  8. 私钥类型:选择 RSA Key
  9. 存储方式:选择 PEM Encoded files
  10. 路径:输入刚才创建的证书目录 D:\phpstudy_pro\Extensions\Apache2.4.39\conf\ssl_certs
  11. 密码:选择 None (不设置密码)。
  12. 后续步骤
  13. Store in Certificate Store? -> No
  14. 安装步骤 (关键):选择 Run script
  15. 脚本路径:D:\win-acme\Scripts\restart_apache.bat (稍后创建)。
  16. 参数:{CertPaths}
💡 成功提示:当屏幕显示绿色的 Authorization result: valid 时,说明证书已成功生成到指定文件夹。

⚙️ 第三步:配置 Apache 站点

核心思路是:所有站点(主域名和子域名)都指向同一个自动更新的证书文件

进入 Apache 的 vhosts 目录(例如 D:\phpstudy_pro\Extensions\Apache2.4.39\conf\vhosts\),修改配置文件。

1. 主域名配置 (yourdomain.com_443.conf)

<VirtualHost *:443>
    DocumentRoot "D:/wwwroot/your_project/public"
    ServerName yourdomain.com
    # ⚠️ 关键:指定别名,防止泛域名配置抢占其他子域名流量
    ServerAlias www.yourdomain.com

    # --- SSL 核心配置 ---
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA
    
    # 指向 Win-ACME 自动更新的 .pem 文件
    SSLCertificateFile "D:/phpstudy_pro/Extensions/Apache2.4.39/conf/ssl_certs/yourdomain.com-chain.pem"
    SSLCertificateKeyFile "D:/phpstudy_pro/Extensions/Apache2.4.39/conf/ssl_certs/yourdomain.com-key.pem"
    # --- SSL 配置结束 ---

    # 其他配置保持原样...
    <Directory "D:/wwwroot/your_project/public">
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

2. 子域名配置 (例如 https://www.google.com/url?sa=E&source=gmail&q=admin.yourdomain.com)

<VirtualHost *:443>
    DocumentRoot "D:/wwwroot/admin_project"
    ServerName admin.yourdomain.com
    # 如果没有别名,请删除 ServerAlias 这一行,不要留空

    SSLEngine on
    # 引用和主域名完全一样的证书路径!
    SSLCertificateFile "D:/phpstudy_pro/Extensions/Apache2.4.39/conf/ssl_certs/yourdomain.com-chain.pem"
    SSLCertificateKeyFile "D:/phpstudy_pro/Extensions/Apache2.4.39/conf/ssl_certs/yourdomain.com-key.pem"

    # 其他配置...
</VirtualHost>

🔄 第四步:编写暴力重启脚本

由于 PhpStudy 的 Apache 服务名可能不固定(有时叫 Apache,有时叫 Apache2.4.39),且直接 restart 容易卡死,我们采用“先杀进程,再启动”的暴力方案,确保 100% 重载成功。

创建文件:D:\win-acme\Scripts\restart_apache.bat

@echo off
:: ------------------------------------------------
:: Apache 强制重启脚本 (适用于 Win-ACME 自动续签)
:: ------------------------------------------------

:: 1. 强制结束所有 httpd.exe 进程 (静默模式)
taskkill /F /IM httpd.exe >nul 2>&1

:: 2. 等待 3 秒端口释放
timeout /t 3 /nobreak >nul

:: 3. 启动 Apache
:: ⚠️ 注意:请务必修改为您服务器上 httpd.exe 的真实绝对路径
start "" "D:\phpstudy_pro\Extensions\Apache2.4.39\bin\httpd.exe"

:: 4. 退出
exit
注意:脚本中绝对不能包含 pause 命令,否则后台任务会卡死。

⏰ 第五步:配置自动任务

Win-ACME 会尝试自动创建任务,但为了稳妥,建议手动检查或创建 Windows 任务计划。

  1. 打开 任务计划程序 (Task Scheduler)
  2. 创建新任务:
  3. 名称win-acme auto renew
  4. 用户SYSTEM (务必勾选“使用最高权限运行”,确保不管用户是否登录都能运行)。
  5. 触发器:每天早上 09:00。
  6. 操作
  7. 程序D:\win-acme\wacs.exe
  8. 参数--renew --baseuri "https://acme-v02.api.letsencrypt.org/"
  9. 起始于D:\win-acme\

✅ 最终验证

  1. 验证脚本:双击 restart_apache.bat,观察黑框是否一闪而过,且 Apache 服务正常重启。
  2. 验证续签逻辑:在任务计划程序中手动运行该任务,查看“上次运行结果”是否为 0x0 (成功)。
  3. 验证 HTTPS:浏览器访问你的所有子域名,检查证书是否已生效,有效期通常为 90 天。

📝 总结

通过这套方案,我们实现了:

  1. 一张证书走天下:泛域名证书覆盖所有子站。
  2. 全自动无人值守:每天自动检查,过期自动续签。
  3. 服务稳定重启:解决了 PhpStudy 重启服务容易失败的老大难问题。

以后再也不用担心网站证书过期了!🚀

标签: none

添加新评论