使用自签发 SSL 证书进行本地 HTTPS 开发
在本地 Web 开发和测试过程中,模拟生产环境的 HTTPS 连接至关重要。尽管自签发的 SSL 证书不被公共证书颁发机构 (CA) 信任,但它们是本地开发环境中实现 HTTPS 的便捷方法。本文将详细介绍如何使用 ServBay 自带的 OpenSSL 工具生成高效安全的椭圆曲线加密 (ECC) 自签发 SSL 证书,并在 ServBay 中为您的本地网站配置这些证书。我们将以 servbay.demo
作为示例域名进行演示。
了解如何配置 HTTPS 可以帮助您在本地环境充分测试网站在安全连接下的行为,例如处理混合内容警告、Cookie 安全标志等。
概述
自签发证书是由您自己创建和签名的 SSL 证书,而不是由受信任的第三方 CA 签发。它们适用于不需要公共信任的场景,例如:
- 本地开发环境
- 内部测试服务器
- 非敏感数据的内部应用
ServBay 集成了 OpenSSL 工具,方便您直接在终端中生成证书文件。
前提条件
- 已安装并运行 ServBay。
- 熟悉基本的命令行操作。
步骤一:生成自签发 ECC SSL 证书
我们推荐使用 ECC 证书,因为相比传统的 RSA 证书,它们在提供同等安全强度的同时,通常具有更小的密钥、更快的签名和验证速度,以及更低的计算资源消耗。
以下是生成自签发 ECC SSL 证书的具体步骤:
生成 ECC 私钥 (Private Key)
打开您的终端应用程序。运行以下命令生成一个使用
prime256v1
曲线的 ECC 私钥文件servbay.demo.key
。shopenssl ecparam -genkey -name prime256v1 -out servbay.demo.key
1openssl
: 调用 OpenSSL 工具。ecparam
: 用于处理 ECC 参数。-genkey
: 生成密钥。-name prime256v1
: 指定使用的 ECC 曲线名称,prime256v1
(NIST P-256) 是一个常用的、安全的曲线。-out servbay.demo.key
: 指定输出的私钥文件名。
生成证书签名请求 (CSR)
使用上一步生成的私钥文件
servbay.demo.key
创建一个证书签名请求文件servbay.demo.csr
。CSR 包含了您希望包含在证书中的信息(如域名、组织名称等),并由您的私钥签名。shopenssl req -new -key servbay.demo.key -out servbay.demo.csr
1执行此命令后,OpenSSL 会提示您输入一系列信息,用于填充 CSR。请根据提示填写。其中最重要的是
Common Name (e.g. server FQDN or YOUR name)
字段,这里应填写您本地网站使用的域名,例如servbay.demo
。其他字段可以根据您的实际情况或示例填写。以下是一个示例输入过程:
Country Name (2 letter code) [AU]:CN # 国家代码,例如 CN (中国) 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 # **重要:填写您的本地域名** Email Address []:[email protected] # 联系邮箱 Please enter the following 'extra' attributes to be sent on in your certificate request A challenge password []: # 可选,留空即可 An optional company name []: # 可选,留空即可
1
2
3
4
5
6
7
8
9
10
11生成自签发证书
最后,使用之前生成的 CSR (
servbay.demo.csr
) 和私钥 (servbay.demo.key
) 生成一个自签发的 SSL 证书文件servbay.demo.crt
。我们将其有效期设置为 365 天。shopenssl x509 -req -days 365 -in servbay.demo.csr -signkey servbay.demo.key -out servbay.demo.crt
1openssl x509
: 用于处理 X.509 格式证书。-req
: 表明输入是 CSR。-days 365
: 设置证书的有效期为 365 天。-in servbay.demo.csr
: 指定输入的 CSR 文件。-signkey servbay.demo.key
: 使用此私钥对证书进行签名(因为是自签发,所以用自己的私钥)。-out servbay.demo.crt
: 指定输出的证书文件名。
完成上述步骤后,您将在当前目录下得到三个文件:
servbay.demo.key
(私钥),servbay.demo.csr
(证书签名请求), 和servbay.demo.crt
(自签发证书)。
(图片示意:在终端中执行 OpenSSL 命令生成证书文件的过程)
步骤二:在 ServBay 中配置自签发 SSL 证书
生成证书文件后,需要将它们放置在 ServBay 可以访问的位置,并在 ServBay 的网站配置中指定这些文件。ServBay 建议将 SSL 证书文件统一存放在 /Applications/ServBay/ssl
目录下,并为每个域名创建独立的子目录以便于管理。
将证书文件移动到指定目录
按照 ServBay 的建议结构,将生成的证书文件移动到
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/
目录中。如果servbay.demo
目录不存在,请先创建它。sh# 如果目录不存在,先创建 mkdir -p /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ # 移动文件 mv servbay.demo.key /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ mv servbay.demo.crt /Applications/ServBay/ssl/private/tls-certs/servbay.demo/ # CSR 文件通常不再需要,但为了备份或记录可以一并移动 mv servbay.demo.csr /Applications/ServBay/ssl/private/tls-certs/servbay.demo/
1
2
3
4
5
6
7
8/Applications/ServBay/ssl/
: 这是 ServBay 默认用于存放 SSL 相关文件的根目录。private/tls-certs/
: 这是一个推荐的子目录结构,用于存放私有的 TLS/SSL 证书文件。servbay.demo/
: 为每个域名创建一个独立的子目录,有助于管理多个网站的证书。
打开 ServBay 管理界面
启动 ServBay 应用程序,并打开其管理界面。
添加或编辑网站配置
在 ServBay 管理界面中,导航到 网站 (Websites) 选项卡。如果您还没有为
servbay.demo
创建网站配置,点击 添加网站 (Add Website)。如果已存在,选择对应的网站配置进行编辑。配置 SSL/HTTPS
在网站配置详情中,找到 SSL/HTTPS 或类似的设置区域。
选择证书来源为 Custom
在 SSL 证书签发方式或类型选项中,选择 Custom (自定义证书)。
指定证书文件路径
在出现的字段中,分别指定您刚刚移动到 ServBay SSL 目录下的证书文件路径:
- Certificate Key File (证书私钥文件): 输入或浏览到
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/servbay.demo.key
- Certificate File (证书文件): 输入或浏览到
/Applications/ServBay/ssl/private/tls-certs/servbay.demo/servbay.demo.crt
- Certificate Key File (证书私钥文件): 输入或浏览到
设置域名
确保网站配置中的 Domain (域名) 字段设置为
servbay.demo
。保存并应用配置
保存网站配置的更改。ServBay 会提示您应用更改,这通常涉及重启相关的 Web 服务器 (如 Caddy 或 Nginx)。确认应用更改。
(图片示意:在 ServBay 管理界面中配置网站的自定义 SSL 证书路径)
验证 HTTPS 配置
完成 ServBay 中的配置后,您可以通过浏览器访问 https://servbay.demo/
来验证配置是否生效。
由于您使用的是自签发证书,而该证书未被您操作系统或浏览器信任的公共 CA 签发,浏览器会显示安全警告,提示证书不被信任或存在隐私风险。这是预期行为。
(图片示意:浏览器访问使用自签发证书的网站时显示的警告信息)
您可以选择忽略警告并继续访问(通常有一个“高级”或“继续访问”的选项),或者为了避免每次都看到警告,您可以将此自签发证书添加到您操作系统的信任存储中。
(图片示意:浏览器中查看自签发证书的详细信息)
通过查看证书详情,您可以确认浏览器确实加载了您配置的 servbay.demo
证书。
注意事项
- 私钥安全: 您的私钥文件 (
.key
) 是非常敏感的,应妥善保管,不要泄露。在本地开发环境中,确保其文件权限仅允许 ServBay 用户访问。 - 文件路径: 确保在 ServBay 配置中指定的证书文件路径是完整且正确的。
- 域名匹配: 生成证书时 Common Name (CN) 字段填写的域名必须与您在 ServBay 中配置的网站域名完全匹配,否则浏览器会报告证书域名不匹配错误。
- 证书有效期: 自签发证书的有效期是您在生成时指定的 (
-days
参数)。过期后需要重新生成和配置。
相关主题与替代方案
虽然自签发证书适用于基础的本地 HTTPS 测试,但如果您希望在本地开发环境中获得更接近公共 CA 信任的体验,可以考虑 ServBay 提供的其他选项:
- ServBay User CA: ServBay 提供了一个用户级的 CA 工具。您可以将 ServBay User CA 添加到操作系统的信任存储中。然后使用 ServBay User CA 签发证书给您的本地网站。这些证书将在您的操作系统和浏览器中被信任,从而避免自签发证书的警告。这对于需要测试 OAuth 回调、Webhooks 或其他需要信任证书的场景非常有用。
- ServBay Public CA: ServBay 也提供了一个公共 CA 的功能,可以为本地域名签发证书,并自动配置系统信任。
这些替代方案通常比手动生成和信任自签发证书更便捷,尤其是在管理多个本地网站时。您可以查阅 ServBay 的相关文档了解如何使用这些功能。
常见问题 (FAQ)
- 问:为什么我生成了证书,浏览器还是显示不安全?
- 答:自签发证书不被公共 CA 信任,浏览器出于安全考虑会显示警告。这是正常现象。要避免警告,您需要将该证书或用于签发它的 CA (如果您使用了 ServBay User CA 等) 添加到操作系统的信任存储中。
- 问:我可以使用 RSA 证书吗?
- 答:可以。OpenSSL 也支持生成 RSA 证书。您可以使用
openssl genrsa -out servbay.demo.key 2048
等命令生成 RSA 私钥,然后继续 CSR 和证书生成步骤。但我们推荐使用 ECC 证书以获得更好的性能。
- 答:可以。OpenSSL 也支持生成 RSA 证书。您可以使用
- 问:如何将自签发证书添加到 macOS 的信任存储?
- 答:打开“钥匙串访问” (Keychain Access) 应用,选择“系统”或“登录”钥匙串。将
.crt
文件拖放到钥匙串中。双击导入的证书,展开“信任”部分,将“安全套接字层 (SSL)”设置为“始终信任”。关闭窗口并可能需要输入密码。然后重启浏览器。
- 答:打开“钥匙串访问” (Keychain Access) 应用,选择“系统”或“登录”钥匙串。将
总结
通过本文,您已经学会了如何使用 ServBay 集成的 OpenSSL 工具生成自签发的 ECC SSL 证书,并将其配置到 ServBay 的本地网站中。虽然自签发证书主要用于本地开发和测试,但它们是理解 HTTPS 工作原理和在本地启用安全连接的重要一步。对于更便捷的本地信任管理,建议您进一步了解 ServBay 提供的 User CA 和 Public CA 功能。希望这些步骤能够帮助您更好地进行本地 Web 开发。