创建 SSL 服务器套接字终止符

Create an SSL server socket terminator

我需要将 EPP(基于会话的协议 - https://www.rfc-editor.org/rfc/rfc5734)转换为基于 HTTP request/response 的协议(JSON)。 JSON 部分已经编码,正在与一些客户合作。

我看过使用 websockets 的 nginx,但 websockets 对于原始 EPP 协议来说显得太高了。

我需要解决以下过程:

  1. nginx 终止 SSL TCP 连接
  2. 读出 EPP 请求 (XML) - 最好在 PHP
  3. 转换为 JSON 并将其发送到 HTTP 服务器
  4. 读取结果
  5. 转换为 XML 并将其发送回 EPP 连接

nginx 中是否有推荐的技术来实现这一点?我可以毫不费力地编写 PHP 套接字服务器。

所以您正在构建 EPP 服务器?欢迎来到 EPP 世界,从它诞生时甚至更早的时候就有人在其中 :-)

EPP 是一种“简单”协议,使用 XML 基于 TLS(通常,有一些基于 HTTPS 的实例,在起草期间它们是其他提案,例如基于 SMTP 或 BXXP)。

因此,作为服务器,您需要能够处理 TLS 终止的东西,请阅读 XML。这在任何语言中都是可能的,而且不是火箭科学。当然,细节决定成败。而且您没有提供足够的 details/context 来准确查看您可能有哪些限制或具体问题。 所以你在这里可能有点跑题了,因为如果你想让别人帮助你,写一个简单的服务器处理 TLS 和阅读 XML 需要在这里显示为代码。

请务必多次阅读 RFC 5734 以了解具体的交通注意事项。您当然需要记住它是一个有状态协议,因此如果您通过无状态协议在内部“转发”请求,您将需要进行某种身份验证。

你不需要websockets,其实我不明白你为什么要说websockets。您只需要 TLS 终止,而不是 HTTPS。

也看看 HAProxy,它是处理此类问题的流行处理程序。

但同样,根据您的特定(未知)约束(特别是客户端数量、查询量、所需的 SLA 等),像 stunnel 这样简单的东西可能就足够了。

请注意,您有 mod_epp for Apache。也许不再很活了,但可以给你想法。当服务器实际上收到 EPP 帧而不是 HTTP 帧时,它允许在 Apache 下使用任何 CGI 程序。

附带说明一下,除了安全性(但应该包含在 RFC5734 中),我建议您注意编码、XML 命名空间,并避免在同一个流中使用多个序列化机制( XML 里面的 JSON 和 JSON 里面的 XML 一样是个坏主意,但我不知道你的“转换”部分是如何工作的。