在 ServBay 中使用第三方机构申请的 SSL 证书
在模拟生产环境进行本地开发或测试时,使用由可信第三方机构(CA)签发的 SSL 证书能够确保您的网站通过 HTTPS 安全访问,这对于测试依赖 HTTPS 的功能或确保本地环境与生产环境尽可能一致至关重要。本文将详细介绍如何在 ServBay 本地 Web 开发环境中配置由第三方机构签发的 SSL 证书。
WARNING
请注意,由第三方 CA 签发的 SSL 证书通常只支持标准的域名后缀(如 .com, .org, .net, .cn 等),不支持自定义的非标准后缀(如 .local, .test, .demo 等),因为这些非标准域名无法进行公开验证。如果您的本地开发域名使用非标准后缀,建议考虑使用 ServBay 内置的 ServBay User CA 或 ServBay Public CA 功能来生成受信任的本地 SSL 证书。
应用场景
- 模拟生产环境: 精确模拟生产环境的 HTTPS 配置,测试网站在 HTTPS 下的行为。
- 测试 HTTPS 依赖功能: 测试需要安全上下文(Secure Context)的浏览器 API 或功能,例如 Service Workers、Web Crypto API、Geolocation 等。
- 本地 API 开发: 为本地运行的后端 API 配置 HTTPS,方便前端通过 HTTPS 调用。
前提条件
在开始之前,请确保您已满足以下条件:
- 已在 macOS 上安装并运行 ServBay。
- 对终端和命令行操作有基本了解。
- 系统已安装 OpenSSL 工具(macOS 通常自带)。
步骤一:申请第三方 SSL 证书
首先,您需要从可信的第三方 CA(如 Let's Encrypt、DigiCert、GlobalSign、Sectigo 等)申请一个 SSL 证书。本节将介绍生成证书签名请求(CSR)所需的步骤,这是申请证书的关键一步。
生成私钥(Private Key)
私钥是您的服务器用来解密 SSL 加密流量的关键文件,必须妥善保管且不泄露。在终端中运行以下 OpenSSL 命令生成一个 RSA 私钥:
shopenssl genpkey -algorithm RSA -out servbay.demo.key -pkeyopt rsa_keygen_bits:20481openssl genpkey: OpenSSL 命令,用于生成私钥。-algorithm RSA: 指定私钥算法为 RSA。-out servbay.demo.key: 指定输出文件名为servbay.demo.key。-pkeyopt rsa_keygen_bits:2048: 指定 RSA 私钥的长度为 2048 位。对于大多数用途而言,2048 位是当前推荐的最小长度,提供足够的安全性。
生成证书签名请求(CSR)
CSR 是包含您的公钥和申请证书所需信息的文件。您需要将此文件提交给 CA。使用上一步生成的私钥创建 CSR:
shopenssl req -new -key servbay.demo.key -out servbay.demo.csr1openssl req: OpenSSL 命令,用于处理证书签名请求。-new: 指示创建新的 CSR。-key servbay.demo.key: 指定用于签名的私钥文件。-out servbay.demo.csr: 指定输出 CSR 文件名为servbay.demo.csr。
运行此命令后,系统会提示您输入一系列信息,用于填充 CSR。请根据您的实际情况或 CA 的要求填写。以下是一个示例输入及说明:
Country Name (2 letter code) [AU]:CN # 国家代码,例如 CN (中国), US (美国) State or Province Name (full name) [Some-State]:Hong Kong # 省份或州名 Locality Name (eg, city) []:Kowloon # 城市名 Organization Name (eg, company) [Internet Widgits Pty Ltd]:ServBay # 组织/公司名称 Organizational Unit Name (eg, section) []:Development # 组织单位名称 (可选) Common Name (e.g. server FQDN or YOUR name) []:servbay.demo # **最重要:填写您要申请证书的完整域名 (FQDN)。** Email Address []:admin@servbay.demo # 联系邮箱 (可选) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: # 挑战密码 (通常留空) An optional company name []: # 可选公司名称 (通常留空)1
2
3
4
5
6
7
8
9
10
11
12请确保在
Common Name字段中准确填写您计划在 ServBay 中使用的域名,例如servbay.demo。如果需要为多个域名申请证书(多域名证书,SAN 证书),CA 的申请流程中会提供额外的方式来指定这些域名,但基本的 CSR 生成步骤类似,或者某些 CA 会提供在线工具生成包含 SAN 的 CSR。提交 CSR 并获取证书
将生成的
servbay.demo.csr文件内容复制或上传到您选择的第三方 CA 的网站上,按照其流程完成域名所有权验证(通常通过 DNS 记录、HTTP 文件或邮箱验证)。验证通过后,CA 会签发证书文件。您通常会收到以下文件:- 您的主证书文件(例如
servbay.demo.crt或servbay.demo.pem)。 - 一个或多个中间证书文件(构建证书链,例如
intermediate.crt,ca-bundle.crt)。 - 根证书文件(通常不需要单独安装,浏览器/操作系统已内置)。
- 您的主证书文件(例如
步骤二:在 ServBay 中配置第三方 SSL 证书
获得第三方 CA 签发的证书文件后,接下来需要在 ServBay 中导入并配置这些证书,以便您的网站可以使用 HTTPS。
ServBay 建议将自定义的证书和私钥文件统一存放在 /Applications/ServBay/ssl/import/tls-certs/ 目录中,这有助于管理。
将证书和私钥文件移动到指定目录
将您在步骤一中生成的私钥文件 (
servbay.demo.key) 以及从 CA 获取的主证书文件 (servbay.demo.crt) 和所有中间证书文件(例如intermediate.crt)移动到 ServBay 的导入目录:shmv servbay.demo.key /Applications/ServBay/ssl/import/tls-certs/ mv servbay.demo.crt /Applications/ServBay/ssl/import/tls-certs/ # 如果有中间证书链文件,也一并移动 mv intermediate.crt /Applications/ServBay/ssl/import/tls-certs/ # 如果有其他中间证书,也一并移动 # mv another_intermediate.crt /Applications/ServBay/ssl/import/tls-certs/1
2
3
4
5
6合并中间证书到主证书文件
为了确保浏览器能够正确验证证书链的完整性,您需要将所有中间证书的内容追加到您的主证书文件中。证书链的顺序通常是从您的主证书开始,然后是所有中间证书,最后是根证书(根证书通常不需要包含在文件中,因为操作系统或浏览器已经信任它)。CA 提供中间证书时通常会说明正确的顺序。请按照正确的顺序将中间证书文件内容追加到您的主证书文件
servbay.demo.crt的末尾。例如,如果您的中间证书文件是
intermediate.crt:shcat intermediate.crt >> /Applications/ServBay/ssl/import/tls-certs/servbay.demo.crt1如果有多个中间证书文件,请按照 CA 提供的顺序依次追加。例如,如果顺序是
intermediate1.crt->intermediate2.crt:shcat intermediate1.crt >> /Applications/ServBay/ssl/import/tls-certs/servbay.demo.crt cat intermediate2.crt >> /Applications/ServBay/ssl/import/tls-certs/servbay.demo.crt1
2完成合并后,
servbay.demo.crt文件将包含您的主证书和完整的中间证书链。打开 ServBay 管理面板
启动 ServBay 应用,并在菜单栏或 Dock 中找到 ServBay 图标,点击打开管理面板。
添加或编辑网站
在 ServBay 管理面板左侧导航栏中,选择
网站。- 如果您是新建网站,点击右上角的
+按钮。 - 如果您是为现有网站配置证书,选中该网站,然后点击编辑按钮(铅笔图标)。
- 如果您是新建网站,点击右上角的
配置 SSL 证书
在网站配置界面的 SSL 部分,您会看到不同的证书签发方式选项。选择
Custom(自定义)。- Certificate Key File (证书私钥文件): 点击浏览按钮,导航到
/Applications/ServBay/ssl/import/tls-certs/目录,选择您导入的私钥文件,例如servbay.demo.key。 - Certificate File (证书文件): 点击浏览按钮,导航到
/Applications/ServBay/ssl/import/tls-certs/目录,选择您合并了中间证书的主证书文件,例如servbay.demo.crt。
(注:图片路径为示例,实际可能需要更新为 ServBay 文档网站的实际图片路径)- Certificate Key File (证书私钥文件): 点击浏览按钮,导航到
设置域名和网站根目录
在网站配置中,确保
Domain(域名)字段填写的是您申请证书时使用的域名,例如servbay.demo。同时,配置好网站的Document Root(网站根目录),例如/Applications/ServBay/www/servbay.demo。保存并应用配置
完成所有配置后,点击保存按钮。ServBay 会提示您应用更改并重启相关的 Web 服务器(如 Caddy, Nginx 或 Apache)。确认应用更改。
验证配置
配置完成后,您可以通过浏览器访问您配置的网站(例如 https://servbay.demo)。如果一切配置正确,您应该能够在浏览器地址栏看到安全锁图标,点击锁图标可以查看证书详情,确认使用的是您导入的第三方 CA 签发的证书,并且证书链是完整的。
如果遇到问题,请检查以下几点:
- 域名是否与证书的 Common Name 或 SAN 匹配。
- 私钥和证书文件路径是否正确。
- 证书文件是否包含了完整的中间证书链,并且顺序正确。
- ServBay 中的网站配置是否已保存并应用。
- 您的系统是否信任签发证书的根 CA(通常第三方 CA 的根证书已被主流操作系统和浏览器信任)。
注意事项
- 域名匹配: 导入的证书必须与您在 ServBay 中配置的网站域名完全匹配(包括子域名,如果证书是泛域名的)。
- 证书有效期: 第三方证书有有效期。在证书过期前,您需要续订证书并按照上述步骤更新 ServBay 中的证书文件。
- 私钥安全: 私钥文件 (
.key) 极其重要,请务必妥善保管,防止泄露。 - ServBay 提供的其他 SSL 选项: ServBay 也提供了其他便捷的 SSL 配置方式,例如:
- ServBay User CA / Public CA: 用于生成受信任的本地开发证书,支持任意域名后缀。
- ACME (Let's Encrypt): 对于标准域名,ServBay 可以集成 ACME 客户端自动申请和续订 Let's Encrypt 证书。 本文介绍的自定义导入方式适用于您已经通过其他渠道获取了第三方证书的场景。
常见问题解答 (FAQ)
Q1: 我收到了一个 .pfx 或 .p12 格式的证书文件,如何在 ServBay 中使用?
A1: .pfx 或 .p12 文件通常包含私钥和证书链。您需要使用 OpenSSL 将其导出为单独的私钥 (.key) 和证书 (.crt) 文件。例如:
sh
openssl pkcs12 -in your_certificate.pfx -nocerts -out your_private_key.key -nodes
openssl pkcs12 -in your_certificate.pfx -clcerts -nokeys -out your_certificate.crt1
2
2
导出后,您可能还需要单独获取中间证书链文件(通常 CA 会提供)并按照步骤二中的说明合并到 .crt 文件中。
Q2: 我按照步骤配置了,但浏览器仍然显示“不安全连接”警告?
A2: 请检查:
- 域名是否匹配: 浏览器访问的域名是否与证书中的域名一致?
- 证书链是否完整: 导入的
.crt文件是否包含了所有的中间证书,并且顺序正确?可以使用在线 SSL 检查工具验证证书链。 - ServBay 是否重启: 确认 ServBay 应用配置并重启了 Web 服务器。
- 浏览器缓存: 清除浏览器缓存或尝试在隐身模式下访问。
- 系统信任: 确保签发证书的根 CA 已被您的操作系统信任。
总结
通过遵循本文的步骤,您可以在 ServBay 本地开发环境中成功配置和使用由第三方机构签发的 SSL 证书。这使得您能够更准确地模拟生产环境的 HTTPS 设置,从而更有效地进行本地开发和测试。虽然 ServBay 提供了多种更便捷的 SSL 配置选项(如 ACME、ServBay CAs),但掌握自定义导入第三方证书的方法,对于处理特定证书需求或迁移现有证书的用户来说仍然非常有用。
