在 OpenResty Edge 中上传 SSL 证书,只需进入 Admin Web 控制台里应用的 SSL 页面,粘贴或上传 PEM 格式的私钥和证书,保存后发布一次配置,新证书就会到达每一台网关服务器,不需要服务器重载、重启或二进制升级。

下面我们用 test-edge.com 这个示例应用完整走一遍手动上传,再用 curl --resolve 验证网关实际提供的是哪一张证书。

在 Edge 控制台上传 SSL 证书和私钥

OpenResty Edge 管理控制台中的 SSL 证书上传页面

像往常一样,让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。

这一次,我们继续使用 test-edge.com 域名的应用作为例子。

OpenResty Edge 应用列表中按 test-edge.com 域名筛选

我们可以看到它已经为 SSL 在 443 端口上进行监听了。

test-edge.com 应用同时监听 HTTP 80 端口和 HTTPS 443 端口

让我们进入这个应用。

在 OpenResty Edge 控制台中进入 test-edge.com 应用

进入 SSL 页面。

OpenResty Edge 应用侧边栏中的 SSL 页面入口

目前还没有添加 SSL 证书。

test-edge.com 应用下还没有任何 SSL 证书

让我们添加一个新的证书。

SSL 页面上的添加证书按钮

我们支持各种添加新 SSL 证书的方式,包括 Let’s Encrypt,以及通过 ACME 协议实现 SSL 证书自动化管理

OpenResty Edge 中添加 SSL 证书的多种方式,包括 Let’s Encrypt 和手动上传

这里我们只演示手动上传的方式。

OpenResty Edge 中手动上传 SSL 证书的表单

我们可以在这里复制和粘贴 PEM 格式的 SSL 私钥。

把 PEM 格式的 SSL 私钥粘贴到上传表单中

也直接浏览本地文件系统并选择一个本地文件进行上传。

从本地文件系统上传 SSL 私钥文件

并同时粘贴对应的 PEM 格式的 SSL 证书。

把 PEM 格式的 SSL 证书粘贴到上传表单中

同样,也可以直接浏览并上传一个本地证书文件。

从本地文件系统上传 SSL 证书文件

有时,CA 可能会提供一个单独的文件,其中包含中间信任的 CA 证书链。

填写中间信任 CA 证书链的输入框

但更多的时候,证书链已经包含在这里的服务器证书文件中。

服务器证书输入框,证书链通常已经包含在其中

在这个例子中,我们把它留空,因为我们没有这个单独的文件。

中间 CA 证书链输入框留空

保存我们的证书和密钥对。

保存上传的 SSL 证书和私钥对

可以看到新创建的证书和配对密钥的记录了。

SSL 页面上列出新创建的证书和密钥对记录

证书来源是手动上传。

证书来源显示为手动上传

证书是对应这个单一的域名的,test-edge.com。

上传的证书只对应 test-edge.com 这一个域名

它将在大约一年后到期。

SSL 证书显示将在大约一年后到期

我们可以通过将鼠标悬停在上面看到确切的过期时间。

鼠标悬停后显示 SSL 证书的确切过期时间

现有的证书是可以编辑的。

在 OpenResty Edge 中编辑已有的 SSL 证书

我们在这里不做任何修改。

未做任何修改就关闭 SSL 证书编辑表单

这个证书也是可以删除的。

OpenResty Edge 中删除 SSL 证书的操作

现在我们还不想删除它。

取消删除该 SSL 证书

但可以禁用它。

不删除证书,只是将其禁用

无需 reload 或重启服务器即可推送新证书

证书已经保存,但还没有生效。和 OpenResty Edge 里其他所有配置变更一样,它要通过一次发布才会生效。

像往常一样,我们需要发布新的配置来推送我们的新证书。

需要发布一次配置才能把 SSL 证书推送到网关

点击这个按钮。

OpenResty Edge 控制台中的发布按钮

发布!

确认发布刚上传的 SSL 证书

完成了!

新 SSL 证书发布完成

现在,新的证书已经被推送到所有的网关集群和服务器上。

新 SSL 证书已推送到所有网关集群和服务器

我们的配置变化不需要服务器重载、重启或二进制升级。所以它是非常有效和可扩展的。

OpenResty Edge 无需 reload 或重启即可将配置变更同步到网关的示意图

用 curl –resolve 测试上传的证书

然后,我们可以用一个网关集群服务器来测试我们的新证书。

用于测试新证书的网关集群服务器列表

在旧金山附近选择一个网关服务器。

选中旧金山附近的一台网关服务器用于测试

复制它的公共 IP 地址,以 133 结尾。

复制网关服务器以 133 结尾的公网 IP 地址

在终端上,我们可以向这个网关服务器发送一个 HTTPS 请求。

curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/

--resolve 选项只为这一次请求把 test-edge.com 这个域名钉到指定的网关 IP 上,这样我们可以自己决定由哪一台网关服务器来应答,而请求本身依然带着真实的域名。

curl –resolve 向网关服务器发送 HTTPS 请求的输出

成功了!

还可以使用 -v 选项检查更多细节,比如证书信息。

curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/ -v 2>&1 | less -n

确实可以看到我们的服务器证书。

curl -v 输出中显示 test-edge.com 正在提供刚上传的服务器证书

对其余的网关服务器重复同一条命令,就能确认每一台都在提供新证书。

SSL 证书的上传也可以通过 OpenResty Edge 的 Python SDK 自动进行。我们将在另一个视频中演示。

用于自动上传 SSL 证书的 OpenResty Edge Python SDK

证书生效之后,你可能还想把所有 HTTP 请求重定向到 HTTPS,让访客始终使用它。

常见问题

在 OpenResty Edge 中更新 SSL 证书后需要 reload 或重启 nginx 吗?

不需要。在 OpenResty Edge 中,你在 Admin 控制台上传证书并发布一次配置,变更就会被推送到所有的网关集群和服务器。包括证书在内的配置变更,都不需要服务器重载、重启或二进制升级。

如何只在某一台指定的网关服务器上测试新的 SSL 证书?

使用带 --resolve 选项的 curl,例如 curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/。它只为这一次请求把域名钉到该网关的公网 IP 上,这样你可以自己决定由哪一台网关来应答,而请求依然带着真实的域名。加上 -v 还能打印出证书的详细信息。

中间 CA 证书链需要单独上传吗?

是否需要单独上传,取决于服务器证书文件中是否已包含完整的中间证书链。如果已经包含,可以把证书链一栏留空;如果只包含服务器证书,则必须在专门的输入框中补充中间证书链,否则部分客户端可能无法建立 HTTPS 连接。

不通过 Web 控制台可以上传 SSL 证书吗?

可以。证书上传能够通过 OpenResty Edge 的 Python SDK 自动完成。如果你根本不想接触证书文件,Edge 也可以通过 Let’s EncryptACME 协议替你签发和续期证书。

可以只停用证书而不删除它吗?

可以。每一条证书记录都可以编辑、删除,也可以只是禁用,这样在保留证书和密钥对的同时让它不再生效。

关于 OpenResty Edge

OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文) 。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!