【问题标题】:Java non-blocking TLS PSKJava 非阻塞 TLS PSK
【发布时间】:2015-06-23 13:30:44
【问题描述】:

我正在使用一个框架(Vertx 2)并且需要实现一个在 TLS 之上运行的服务。 Vertx 2 支持 TLS,但我无法让它使用必要的密码(以及其他密码):

  • TLS_PSK_WITH_3DES_EDE_CBC_SHA
  • TLS_PSK_WITH_AES_128_CBC_SHA

我也不能使用 Bouncy Castle 轻量级 API,因为它是基于流的和阻塞的(产生线程等来处理这个是不可接受的,因为它不会扩展)。 JESSIE 也是如此。

它必须使用带有预共享密钥的 AES 和 DES,但我一直无法找到让它工作的方法。任何非阻塞/异步的解决方案都是可行的。

【问题讨论】:

  • 了解为什么不能使用密码以及 JDK 是什么会很有帮助
  • 假设您的意思是 JSSE(如标记),确实在非阻塞 NIO 套接字之上提供具有“引擎”模式的非阻塞/异步操作。但这对您没有帮助,因为 JSSE 在任何类型的 I/O 中执行 PSK。
  • @OlegMikheev 正如 dave_thompson 所说,JSSE 没有使用 PSK 实现任何密码。
  • @dave_thompson_085 我指的是 JSSE 和 JESSIE 库。有什么办法(无需重新实现 TLS)我可以将 PSK 添加到 JSSE?
  • 我从未听说过 JESSIE,但从那个链接来看,它似乎已经快死了。没有 API 可以直接向 (Oracle) JSSE 添加内容,只能启用和禁用已经存在的内容。 Java 大部分是开源的(包括 JSSE)openjdk.java.net,您可以创建自己的副本并修改它,尽管我不确定 Java 许可是否允许您使用 Oracle 版本的 JRE分发它/JDK(IANAL)。 FWIW,PSK 是更简单的密钥交换之一,一旦您了解了软件结构,添加它可能就不难了。 ...

标签: java ssl vert.x jsse


【解决方案1】:

如果您使用的是 Linux 或 OSX,Conscrypt (https://conscrypt.org) 可能是一个选择。这是一个 OpenSSL/BoringSSL 支持的 JCA 提供程序,它将为您提供 SSLEngine impl,然后您可以在非阻塞模式下与 Java NIO 一起使用。就上下文而言,Conscrypt 是 Android 上加密和 TLS/SSL 原语的默认提供者。

要将它与 TLS-PSK 一起使用,您需要使用 org.conscrypt.PSKKeyManager 的实现来初始化 Conscrypt 提供的 SSLContext,然后从该上下文中获取 SSLEngine。有关文档,请参阅 PSKKeyManager 接口 Javadoc 或非常相似的 Android 框架类 PskKeyManager 的 Javadoc (https://developer.android.com/reference/android/net/PskKeyManager.html)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多