php - 通过 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 扩展无法实现,有人知道我们是否可以使用套接字函数来实现这一点吗?我已经经历了很多与此相关的线程,但找不到正确的答案。抱歉,如果这已经得到回答。
解决方案
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。
推荐阅读
- kubernetes - “更新”Kubernetes RBAC 权限有什么作用?
- certificate - 如何从 Inno Setup 的 [Files] 部分取消对文件的签名?
- assembly - Eclipse CDT 中的“Hello World”,使用 Oracle VirtualBox:构建失败
- autohotkey - 将脚本转换为在后台运行
- python-3.x - 未捕获的类型错误:无法读取未定义的属性“sid”
- android - AnchorNode/Models 在 android sceneform sdk 中消失了
- terraform - 如何将 LogDNA 或 SysDig 实例标记为平台日志或指标的默认目标?
- sql-server - MS Access VBA将SQL中的字符串解释为int?
- python - Django 创建唯一的外键对象
- x86 - Skylake中干净缓存行的写回?