通过 SSL 从 php 应用程序连接到 gearman 服务器

Connecting from php application to gearman server over ssl

我正在尝试加密从 php 5.6.40 上的应用程序 运行 到 gearman 服务器(版本 1.1.12)的连接。我已经启动了启用 ssl 的 gearman 服务器,并将 ca 文件、证书和密钥作为参数传递。

gearmand -d --ssl --ssl-ca-file=ca.crt --ssl-certificate=gearman.crt --ssl-key=gearman.key

我现在遇到的困难是让我的 php 客户端使用 ssl。我正在使用 php 的 gearman 扩展附带的 GearmanClient class,但我无法找到实现此目的的方法。

 $gearmanClient = new GearmanClient();
 $gearmanClient->addServer('server ip', 4730);
 $result = $gearmanClient->doHighBackground('job-type', 'workload');

上面的代码有效,但作业类型和工作量未加密地发送到 gearman 服务器。如果 php 的 gearman 扩展不可能,有人知道我们是否可以使用套接字函数来实现吗?我已经浏览了很多与此相关的线程,但找不到合适的答案。抱歉,如果已经回答了这个问题。

据称 SSL 无法 工作。 This was posted as a bug long time ago 并且这个问题仍然被认为是开放的。官方扩展似乎也死了:上次发布是 6 年多以前了。

如果我处在你的位置,我会转向更稳定、社区支持更好的东西。

我之前犹豫要不要回答这个问题,因为它与PHP有关。

实际上 gearmand 正确支持 SSL 连接。 @emix 提到的问题仍然未解决,因为 gearmand 本身在 repository.

中没有 ssl 测试

gearmand Client/Worker supports SSL connection and contains ssl tests 的 Perl 实现。

gearmand 中的 SSL 支持工作得很好。我已经在生产环境中使用它大约 3 年了。另一个答案中提到的问题仍然悬而未决,因为该问题实际上是关于对文档进行改进,并且该愿望清单项目尚未解决。

在 PHP 扩展中获得 SSL 支持是可能的,但这需要您自己修补和编译代码。 PHP 扩展的当前版本可以在 https://github.com/wcgallego/pecl-gearman 找到,但那是针对 PHP 7.x.

据我所知,旧版本 PHP (< 7.x) 的 Gearman PECL 扩展已不再维护,但您可以在 https://github.com/hjr3/pecl-gearman and apply the patch at https://bugs.php.net/bug.php?id=67623 下载最新版本.有用。在搬到 PHP 7.x.

之前,我的工作场所在生产中使用了大约一年

如果您使用的是 PHP 7+,我最近在 https://github.com/wcgallego/pecl-gearman/pull/72. You should also read the issue thread at https://github.com/wcgallego/pecl-gearman/issues/43 打开了一个用于添加 SSL 支持的 PR,用于一些警告。

在任何一种情况下,您还需要来自 gearmand 1.1.19 或更新版本的 libgearman.so,它使用 --enable-ssl 编译并支持 setSSL() API。