Posted in

公网 XAMPP + Let’s Encrypt 配置 HTTPS 标准流程

Step 1:安装 Certbot

下载 Certbot 官方 Windows 安装包:https://certbot.eff.org/instructions?ws=apache&os=windows
或使用 winget 安装:

winget install certbot

装完以管理员身份开 CMD,验证:

certbot --help

Step 2:申请证书

方案 A:standalone(需要停 Apache)

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

会问邮箱 → 输 → 同意条款(Y) → 订阅(Y)。成功后证书在:

C:\Certbot\live\yourdomain.com\fullchain.pem
C:\Certbot\live\yourdomain.com\privkey.pem

缺点:续期时也要停 Apache(standalone 要抢 80 端口),等于短暂停机。

方案 B:webroot(推荐,不停 Apache)

原理:Certbot 在网站根目录下扔一个 .well-known/acme-challenge/ 文件,CA 来爬这个文件验证域名归属,Apache 不用停。

certbot certonly --webroot -w C:\xampp\htdocs -d yourdomain.com -d www.yourdomain.com

-w 后面是 WordPress 所在的根(如果你 WordPress 在 htdocs/wordpress,那 -w C:\xampp\htdocs\wordpress)。

如果卡验证,多半是:① 80 端口被 ISP 封(家宽)② 防火墙没放 80 ③ httpd.conf 里 Deny 了外部访问(Require local 没改成 Require all granted

Step 3:配置 Apache 指向新证书

打开 C:\xampp\apache\conf\extra\httpd-ssl.conf,找到这三行改掉:

SSLCertificateFile "C:\Certbot\live\yourdomain.com\fullchain.pem"
SSLCertificateKeyFile "C:\Certbot\live\yourdomain.com\privkey.pem"

Apache 2.4.8+ 只要上面两行就够了。一定要用 fullchain.pem 而不是 cert.pem,否则证书链不完整,前端调 API 会报 UNABLE_TO_VERIFY_LEAF_SIGNATURE
如果你的 WordPress 是用虚拟主机跑的(httpd-vhosts.conf<VirtualHost *:443> 那段),证书路径改在那个 <VirtualHost> 块里更干净。

Step 4:防火墙 + 路由器放行

Windows 防火墙放行 443(80 也留着给续期/重定向):

netsh advfirewall firewall add rule name="HTTPS Apache" dir=in action=allow protocol=TCP localport=443
netsh advfirewall firewall add rule name="HTTP Apache" dir=in action=allow protocol=TCP localport=80

云服务器还要去安全组把 80/443 入站打开,家宽要去路由器端口映射把 WAN:443 → LAN:443 指到这台机器。

Step 5:重启 Apache,验证

浏览器访问 https://yourdomain.com,点锁图标看签发者是不是 Let’s Encrypt。

Step 6:WordPress HTTPS 坑(必做)

如果 WordPress 之前是用 http:// 装的,数据库里 siteurl / home 还是 http,切 HTTPS 后会 mixed content——CSS/JS/图片全 404,后台还可能登不进。

wp-config.php 里强制覆写(推荐):

define('WP_HOME', 'https://yourdomain.com/wordpress');
define('WP_SITEURL', 'https://yourdomain.com/wordpress');

然后后台 → 设置 → 固定链接 随便点保存一下,把旧 http 的附件地址也刷掉。或者用 “Better Search Replace” 插件批量替换。

家宽场景的特殊处理

国内 ISP 封 80/443 是大概率,Let’s Encrypt HTTP-01 验证会直接失败。三条绕法:

  1. DNS-01 验证(最干净):certbot --manual --preferred-challenges dns,去域名商后台加 TXT 记录验证
  2. 改用非标端口:路由器 WAN:8443 → LAN:443
  3. 云服务器反代:买台便宜的国内轻量云,Nginx 反代回家里

家宽如果是动态公网 IP,还得配 DDNS(花生壳/阿里云 DDNS/Cloudflare API)。

自动续期

Let’s Encrypt 证书 90 天有效期。Certbot Windows 安装时会自动往任务计划程序塞一个定时任务。
如果用 standalone 方案,续期时会抢 80 端口,需要在续期 hook 里加停启 Apache。webroot 方案没这问题。
手动测续期:

certbot renew --dry-run

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注