【发布时间】:2018-06-27 08:24:47
【问题描述】:
我正在将旧的仅 tcp 的服务器转换为使用 SSL(通过 IBM 的 GSkit),其中一个问题是将 SSL 句柄放入生成的程序中。原始代码通过调用givedescriptor() 将原始套接字传入,然后使用takedescriptor() 获取并使用传入的套接字。
是否有 GSKit/SSL 等效的给/取描述符方法?
givedescriptor() API 文档
更新:
问题在于套接字和 SSLHandle 是在一个进程中创建的,该进程初始化了 SSL 环境,然后需要完全传递给另一个进程 - 因此需要提供/获取描述符,如套接字 / SSLHandle需要“给予”新进程(它实际上是一个 RPG 程序,独立于原始程序提交和运行)。
更新 2:
看起来类似于this question,所以我也会读一下。
来自另一篇文章(没有基于代码的答案,而是书面解决方案)
“看起来会话句柄只是指向某些存储的指针 在堆中。由于单层商店的设计,您可以复制它们 通过共享内存(memmap,shmget/shmat,...)。你只需要确保 打开 GSK 环境的进程不会死掉或 激活组将被清理,这些指针将变为 无效的。您可能还需要放置一个互斥锁或其他一些 如果您要拥有多个线程,则在它们周围锁定原语 访问共享数据结构。”
更新 3:
这是我用来在进程之间共享内存的示例 - Example: Using semaphore set and shared memory functions,但仍然没有完全解决问题。
更新 4:
我想我会添加更多详细信息,说明我为什么需要提出这个问题。我正在更改用作 IBM i 连接点的非阻塞 TCP 服务器。它具有“标准”机制来处理连接,创建线程并协商这些线程中的连接。然后线程创建独立进程(通过sbmjob)。在 vanilla TCP 版本中,我们可以通过give/takedescriptor 函数为正在运行的作业提供套接字句柄,并愉快地写入和从套接字写入。
所以我需要一种等效的方法来让独立运行的程序能够写入 SSL。
目前的机制可能无法做到这一点。
【问题讨论】:
-
这里是 GSKit API 的列表:ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/rzab6/… 你可以使用 gsk_environment_open 获取一个句柄来传递,然后使用该句柄与 API 类似 gsk_attribute_get_cert_info。
-
您是否尝试过通过 SSL 连接使用给与取描述符 API?您是否收到特定错误?
-
对
gsk_secure_soc_read的调用需要gsk_handle,这是在原始程序中设置的,需要进入最终程序,不知何故..跨度> -
似乎只在an SSL reverse proxy后面运行纯文本TCP应用程序会更容易,更可靠和稳定。
-
问题是没有“SSL 句柄”之类的东西。因为 SSL 是一个应用层协议,所以它不可避免地会成为一个 指针 到 originating process 中的一些不透明的数据结构。所以你不能“给”一个“SSL句柄”给另一个进程并期望它工作。
标签: ssl ibm-midrange