【问题标题】:SSL equivalent of givedescriptor() and takedescriptor()SSL 等效于 givedescriptor() 和 takedescriptor()
【发布时间】: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


【解决方案1】:

没有操作系统已知的“SSL 句柄”这样的东西,它可以由子进程继承或转移到其他进程。 'SSL 句柄' 将不可避免地成为一个 指针 指向原始进程中的一些不透明数据结构,因为 SSL 是一个应用层协议,因此在进程中实现,而不是在内核中。因此,您不能将“SSL 句柄”“提供”给另一个进程并期望它能够正常工作。

编辑

这里的答案并没有真正回答潜在的问题,我应该如何做到这一点,所以虽然赏金已经获得,但我不能接受唯一的答案。

答案是你做不到

目前的机制可能无法做到这一点。

正确。正如您在问题中预见到这种可能性一样,很难理解为什么您不能在答案中接受它。

【讨论】:

    【解决方案2】:

    原则上你的想法不是不可能的!如果您认为这是可能的,请尝试找到答案!

    如果来自 SO 的所有回答者都说这是不可能的,那么它并非一直都是真的!

    例如: 15 年前我曾试图找到答案,我该如何编写一个可以在服务器上读写图像的 Java 小程序。 每个人都对我说这是不可能的,但我不相信。一世 试图一次又一次地找到我的答案。我找到了答案:我 从一位专家和源代码中拆解了一个在线 aplet 代码我找到了答案:使用 PHP 服务器我们可以做到。我问了 来自这个小程序的所有者关于之间通信的详细信息 Java-applet 和 PHP 服务器,他帮助了我。

    您必须找到您的专家。这是找到正确答案的第一条规则。可能在 IBM 论坛上你会找到人。

    第二条规则是阅读大量专家的相关书籍。不止一本书。可能是三个或更多。

    我建议您也阅读 How do I ask a good question?,因为在您的问题中,您没有任何计算机语言。而且我认为我们有一位专家可以为您提供正确答案。

    寻找正确专家的第一条规则是设置正确的标签。如果没有正确的标签,只有少数人会看到您的问题,而他们中的某个人是适合您的专家,这只是运气问题。

    保持乐观并尝试相信你!祝你好运和成功!

    【讨论】:

    • 乐观是可爱的,但它不会让方圆成为可能。
    猜你喜欢
    • 2021-12-16
    • 2021-04-04
    • 2010-10-08
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多