首页 > 解决方案 > 通过 ssl 从 php 应用程序连接到 gearman 服务器

问题描述

我正在尝试加密从在 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 类,但我无法找到实现这一目标的方法。

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

上面的代码有效,但作业类型和工作负载未加密发送到 gearman 服务器。如果使用 php 的 gearman 扩展无法实现,有人知道我们是否可以使用套接字函数来实现这一点吗?我已经经历了很多与此相关的线程,但找不到正确的答案。抱歉,如果这已经得到回答。

标签: phpgearman

解决方案


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下载最新版本并应用补丁在https://bugs.php.net/bug.php?id=67623。有用。在迁移到 PHP 7.x 之前,我的工作场所在生产中使用了大约一年。

如果您使用的是 PHP 7+,我最近在https://github.com/wcgallego/pecl-gearman/pull/72打开了一个 PR 以添加 SSL 支持。您还应该阅读https://github.com/wcgallego/pecl-gearman/issues/43上的问题主题,了解一些注意事项。

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


推荐阅读