在 ServBay 中使用 Let's Encrypt 自动申请和管理 SSL 证书
对于现代 Web 开发而言,在本地模拟生产环境至关重要,这包括使用 HTTPS。ServBay 集成了对 ACME (Automated Certificate Management Environment) 协议的支持,使您能够轻松地通过 Let's Encrypt 这样的 CA(Certificate Authority)自动申请、安装和管理免费的 SSL/TLS 证书。本文将详细指导您如何在 ServBay 中利用 Let's Encrypt 签发证书,并将其应用于您的本地开发网站。
使用 Let's Encrypt 证书的好处包括:免费、自动化、广泛信任,并且能够帮助您在本地测试网站的 HTTPS 行为、Service Workers、HSTS 等功能。
前提条件
在开始申请 Let's Encrypt 证书之前,请确保您满足以下条件:
- 拥有一个公网域名: 您需要拥有一个实际注册并可用的域名(例如:
servbay.demo
或yourdomain.com
)。Let's Encrypt 无法为本地 IP 地址或.local
等非公网域名签发证书。 - 能够管理域名的 DNS 记录: ServBay 使用 DNS API 方式验证域名所有权。这意味着您需要能够访问您的域名注册商或 DNS 服务提供商(如 Cloudflare, GoDaddy, AWS Route 53 等)的控制面板,并且能够生成用于自动化操作的 API 密钥。
- 获取 DNS API 密钥: 您需要根据您的 DNS 提供商的要求,生成相应的 API 密钥或令牌。不同的提供商获取 API 密钥的方式不同。通常,您需要生成一个具有管理 DNS 记录权限的 API 密钥。您可以参考
acme.sh
项目的 DNS API WIKI 页面,查找您的提供商并了解如何获取所需的 API 密钥和环境变量名称。
申请步骤
以下是在 ServBay 中通过 Let's Encrypt 申请 SSL 证书的具体步骤:
打开 ServBay 管理面板: 启动 ServBay 应用后,点击菜单栏图标,选择 "管理面板" (Manager Panel) 打开 Web 管理界面。
导航至 SSL 证书管理: 在 ServBay 管理面板的侧边栏中,找到并点击
SSL 证书
(SSL Certificates) 选项。开始申请新证书: 在 SSL 证书列表页面的右上角,点击圆形的 “+” 按钮。这将弹出一个用于配置证书申请的窗口。
填写证书信息: 在弹出的 “Request Certificate” (申请证书) 窗口中,按照以下说明填写各项信息:
- Common Name (通用名称): 输入一个标识此证书的名称,方便您识别,例如
servbay-demo-cert
或mydomain-wildcard-cert
。 - Usage Purpose (用途): 选择
TLS/SSL
。 - Request Method (申请方法): 选择
ACME
。 - Issuer (颁发机构): 选择
Let's Encrypt
。 - DNS API Provider (DNS API 提供商): 从下拉列表中选择您的域名或 DNS 服务提供商(例如:
cloudflare
表示 Cloudflare,godaddy
表示 GoDaddy)。 - Algorithm (算法): 建议选择
ECC
(Elliptic Curve Cryptography) 算法,并选择密钥长度384
。ECC 证书相比传统的 RSA 证书具有更小的密钥大小,通常能提供更好的性能和安全性。 - E-Mail Address (邮箱地址): 输入您的有效邮箱地址。Let's Encrypt 会使用此邮箱发送关于证书到期、续期失败等重要通知。
- DNS API Tokens (DNS API 令牌): 在此输入您的 DNS 提供商要求的 API 密钥或令牌信息。这些通常以环境变量的形式提供给底层的 ACME 客户端。请参考您的 DNS 提供商文档或
acme.sh
的 DNS API WIKI 页面获取正确的环境变量名称和值。重要提示:请不要在 API 信息前输入export
字样。 例如,对于 Cloudflare,您可能需要输入CF_Key=sdfsdfsdffgfdg\[email protected]
(注意使用\n
分隔不同的环境变量)。 - Domain (域名): 输入您要申请证书的域名。如果需要为多个域名申请证书,或者申请泛域名证书(例如
*.servbay.demo
),请使用英文逗号,
分隔它们(例如:servbay.demo, www.servbay.demo, *.servbay.demo
)。请注意,申请泛域名证书必须使用 DNS API 验证方式。
请注意,截图中的 Common Name 示例为 Test,在实际使用中建议使用更具描述性的名称。
- Common Name (通用名称): 输入一个标识此证书的名称,方便您识别,例如
提交申请: 确认所有信息填写无误后,点击窗口底部的 “Request” (申请) 按钮。
等待申请完成: ServBay 将在后台启动 ACME 客户端,使用您提供的 DNS API 信息进行域名所有权验证,并向 Let's Encrypt 申请证书。这个过程可能需要一些时间,具体取决于 DNS 记录的传播速度和 Let's Encrypt 服务器的响应。ServBay 会在完成后将新申请的证书添加到您的 SSL 证书列表中。
使用证书
证书申请成功并出现在列表中后,您就可以将其应用到您的本地网站上:
- 导航至网站配置: 在 ServBay 管理面板的侧边栏中,点击
网站
(Websites) 选项。 - 编辑网站配置: 找到您想要应用证书的网站,点击其右侧的编辑按钮(通常是一个铅笔图标)。
- 配置 HTTPS/SSL: 在网站配置页面中,找到与 SSL/HTTPS 相关的设置项。通常这里会有一个选项让您选择 SSL 证书来源。
- 选择 ACME 证书: 在证书来源选项中,选择
ACME
。然后,在右侧出现的下拉菜单中,选择您刚刚申请到的、以您设置的 Common Name 标识的证书。 - 保存配置: 保存网站配置更改。ServBay 将重新加载您的网站配置,使新的 SSL 证书生效。现在,您应该可以通过 HTTPS 访问您的本地网站了。
截图展示了在网站配置中选择 ACME 证书的界面。
证书续期
Let's Encrypt 证书的有效期为 90 天。ServBay 内置了自动续期机制。一旦您的 ACME 证书接近到期(通常在到期前 30 天内),ServBay 会自动尝试使用相同的配置信息为您续期证书。您无需手动干预。请确保您的 DNS API 密钥保持有效,以便自动续期顺利进行。如果在续期过程中遇到问题,Let's Encrypt 会向您在申请时提供的邮箱发送通知。
关于 ACME 协议与 DNS API 验证
- ACME 协议: ACME 协议是一个开放标准,用于自动化域名验证和证书颁发过程。Let's Encrypt 等 CA 使用此协议与客户端软件(如 ServBay 集成的 ACME 客户端)交互,实现证书的自动化申请和管理。
- DNS API 验证: 这是 ACME 协议支持的一种验证域名所有权的方式。客户端通过 DNS API 在您的域名 DNS 记录中添加一个特定的 TXT 记录。CA 服务器会查询该记录以确认您对域名拥有控制权。DNS API 验证尤其适用于以下场景:
- 申请泛域名证书(例如
*.servbay.demo
)。 - 您的本地 ServBay 实例无法通过公网直接访问(例如在内网环境中,或者您的 ISP 阻止了 80/443 端口)。
- 申请泛域名证书(例如
选择证书算法:ECC vs RSA
在申请证书时,ServBay 允许您选择 ECC 或 RSA 算法。
- RSA: 传统的公钥加密算法。RSA 证书兼容性最好,几乎所有浏览器和客户端都支持。常见的密钥长度有 2048 位和 4096 位。
- ECC: 基于椭圆曲线的加密算法。相比同等安全强度的 RSA 密钥,ECC 密钥更短(例如 ECC 256 位相当于 RSA 3072 位),这使得 TLS 握手更快,对服务器和客户端的计算资源消耗更低。现代浏览器和操作系统普遍支持 ECC。
建议: 对于新的证书申请,推荐使用 ECC 算法,选择 384 位密钥长度,以获得更好的性能和安全性。如果需要最大程度的兼容性(例如支持非常老的客户端),可以考虑 RSA 证书。
注意事项
- DNS 传播时间: 提交申请后,DNS TXT 记录的更改可能需要一些时间在全球范围内传播(通常几分钟到几小时不等)。如果申请立即失败,请稍候片刻再试。
- API 密钥安全: 您的 DNS API 密钥拥有管理您域名 DNS 记录的权限,请妥善保管,不要泄露。
- Let's Encrypt 速率限制: Let's Encrypt 对证书申请有速率限制。如果您频繁申请或续期同一域名,可能会遇到限制。通常情况下,正常使用 ServBay 的自动续期功能不会触发速率限制。
常见问题 (FAQ)
- Q: 我的域名解析到了本地 IP 地址,可以使用 Let's Encrypt 证书吗?
- A: 可以,只要您使用 DNS API 验证方式。Let's Encrypt 验证的是您是否能控制域名的 DNS 记录,而不是域名是否解析到公网 IP。
- Q: 申请证书失败了,怎么办?
- A: 首先检查您填写的 DNS API 密钥是否正确、是否具有所需的权限。其次,确认您选择了正确的 DNS API Provider。有时是 DNS 记录尚未完全传播,可以稍等几分钟后重试。查看 ServBay 的日志也可能提供失败的具体原因。
- Q: 证书到期前多久 ServBay 会自动续期?
- A: 通常 ServBay 会在证书到期前的 30 天内尝试自动续期。
- Q: 我可以为本地开发环境的
.local
域名申请证书吗?- A: 不可以。Let's Encrypt 只为公共注册的域名颁发证书。对于
.local
或本地 IP 地址,您可以使用 ServBay User CA 或 ServBay Public CA 功能生成自签名证书或伪造 CA 签发的证书用于本地测试。
- A: 不可以。Let's Encrypt 只为公共注册的域名颁发证书。对于
- Q: 如果我的 DNS 提供商不在 ServBay 的列表中怎么办?
- A: ServBay 集成的 ACME 客户端支持绝大多数主流 DNS 提供商。如果您的提供商非常小众,可能需要手动配置。您可以查阅
acme.sh
的 DNS API WIKI,看您的提供商是否被支持,以及如何配置。如果 ServBay UI 中没有列出,可能需要联系 ServBay 支持。
- A: ServBay 集成的 ACME 客户端支持绝大多数主流 DNS 提供商。如果您的提供商非常小众,可能需要手动配置。您可以查阅
总结
ServBay 通过集成 ACME 协议,极大地简化了在本地开发环境中获取和管理 Let's Encrypt SSL 证书的过程。利用 DNS API 验证,您可以轻松为您的公网域名(包括泛域名)申请免费、自动续期的证书,从而在本地准确地模拟生产环境的 HTTPS 配置,提升开发效率和测试的准确性。遵循本文的步骤,即可快速为您的 ServBay 网站启用安全连接。