【问题标题】:Java SSL pre-shared key mode in JSSEJSSE 中的 Java SSL 预共享密钥模式
【发布时间】:2014-02-09 15:26:58
【问题描述】:

我正在为 PC 和 Android 手机开发安全通信框架,不使用证书和公钥交换。将使用预共享密钥。

该框架有自己的身份验证和密钥交换协议。

流程如下:

  1. 主机相互验证

  2. 两台通信主机相互认证后,共享会话私钥。

  3. 主机之间的流量使用该密钥加密。

我计划使用 SSL 进行流量加密,但不使用第三方 SSL 库(仅标准 JSSE 工具)。

实际上,SSL 只会用于流量加密(密钥交换和身份验证已经完成)。

如何为 SSL 显式设置预共享密钥?

如果 JSSE 不直接支持,但可以通过覆盖默认的 SSL 类(SSLEngine、SSLSocketFactory 等)来实现,该怎么做?哪些类可以负责?

【问题讨论】:

  • 您似乎在重新发明 SSL。为什么?
  • 不是重新发明,我打算使用 SSL,但没有 PKI、证书等。这是一个点对点框架,需要删除任何集中控制(尤其是证书和 CA) .

标签: java android ssl encryption cryptography


【解决方案1】:

SSL/TLS 允许您使用除证书之外的多种身份验证机制,例如。您可以使用共享密钥(PSK 密码套件)或 OpenPGP 密钥等。但是,实际上支持这些机制的实现并不多。我不知道 Java 内置密码学是否支持它们。我们的 SecureBlackbox 确实支持 TLS 规范中定义的所有机制,包括我提到的那些。

【讨论】:

  • 好的,谢谢您的回答。共享密钥将用于 SSL。
  • Oracle 的 Java SE JSSE 不包含共享密钥实现 AFAIK。
  • 如何自己实现 Java SSL 类(SSLEngine、SSLSocketFactory 等)?
  • @АндрейМосквичёв Emm,您是在问如何制作它们还是..?如果您的意思是在 SecureBlackbox 中添加这样的东西,那么我们的愿望清单中有这样的想法。您可以在eldos.com/sbb/wishlist.php?vox_idea_id=418 上投票
  • 不,我说的是 JSSE,而不是 SecureBlackbox。有没有办法通过 deviring SSLEngine、SSLSocketFactory 等类来覆盖默认的 Java SSL 行为?
【解决方案2】:

您可以在此处找到由 Bouncy Castle 提供支持并在 Apache v2 许可下发布的开源 TLS PSK JSSE 套接字工厂:https://github.com/clover/pskfactories

该项目包括示例用法。

另外,WolfSSL 似乎也有一个支持 PSK 的 JSSE 实现。它由本机代码提供支持,因此与纯 Java 相比,启动和运行可能需要更多的工作。除非您购买商业许可证,否则它也是 GPLv2。

https://www.wolfssl.com/products/wolfssl-jni-jsse/

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多