Apache Thrift 加密 - Java
Posted
技术标签:
【中文标题】Apache Thrift 加密 - Java【英文标题】:Apache Thrift encryption - Java 【发布时间】:2014-04-25 11:35:39 【问题描述】:我计划将 Thrift 用于客户端/服务器 RPC,并且我想使用 libsodium 加密交换的数据。 我知道有 TLS 内置,但 TLSTransportParameters 似乎没有提供太多配置可能性。
有人知道我在什么时候必须延长节俭才能启用此功能吗?
【问题讨论】:
在 Thrift 用户邮件列表中,甚至在 freenode #thrift 频道中提出这个问题可能是个好主意。 【参考方案1】:我的公司创建了一个自定义的 Camellia 传输层以用于 Thrift。通过创建分层传输,我们能够在端点传输(TSocket、TPipe 等)和序列化协议(TBinaryProtocol 或你有什么)之间插入密码。这需要对 Thrift 进行 0 次修改,并且很容易移植到我们使用的语言(C++、Java、Python)。它还允许我们在需要时将其他标准传输层添加到堆栈中(例如 TFramedTransport)。
要构建这样一个分层传输,您只需将 TTransport 暴露给上面的层,然后从下面的层使用 TTransport。 TTransport 由典型的 unix 文件方法组成:打开、关闭、读取和写入,并添加了重要的 flush() 方法,该方法表示消息已完成并应发送到端点。
Thrift 有一个非常好的架构来进行此类扩展,因此您可以做出其他选择,但我认为对于消息加密,传输层通常是正确的选择。通过将密码放在端点传输(TSocket 等)的上方,您将加密 TCP 有效负载中的所有内容。
【讨论】:
Camellia传输层开源吗? 有几个 Camellia 实现作为开源可用,这里有一个很好的链接:info.isl.ntt.co.jp/crypt/eng/camellia/source.html 清单包括 C、Java、Python 等。您需要为分组密码添加一种模式以进行流式传输。我公司的 Apache Thrift 传输层实现不公开。 请求/响应的内容然后在传输层缓存,然后在发送之前加密?我是否正确理解 TSocket 自己的实现用于加密层目的,还是需要考虑其他方面? Thrift 支持两种类型的传输,端点和分层。端点传输在 Thrift 之外进行 I/O。例如,TSocket 进行套接字 I/O,而 TSimpleFileTransport 进行文件 I/O。分层传输可以堆叠在端点之上,并且在大多数语言实现中可以有多个层。这意味着您可以将 TCipherTransport 创建为分层传输,并将其放置在传输堆栈中端点上方的任何位置。例如,您可以创建一个看起来像这样的 I/O 堆栈:TBinaryProtocol/TFramedTransport/TCipherTransport/TSocket以上是关于Apache Thrift 加密 - Java的主要内容,如果未能解决你的问题,请参考以下文章