【问题标题】:SunJCE vs OpenSSLSunJCE 与 OpenSSL
【发布时间】:2017-02-24 06:38:57
【问题描述】:

最近我用 OpenSSLJCE 替换了 SunJCE,OpenSSLJCE 是一个私有包,它使用 Openssl 原语(本机库)实现 JCE 以进行 TLS 终止。

使用 OpenSSLJCE 已观察到大约 35% 的性能改进。

我的问题是,

  1. 这种性能提升的原因是什么?是不是因为 openssl 是在原生代码中执行的?

  2. 我认为 SunJCE 正在解密(TLS 终止)Java 堆中的内容,而原生 Openssl 需要将内容复制到处理堆然后解密内容并将其发送回 Java 堆,这涉及两个副本。我的理解正确吗?

请提供您的建议和参考。

【问题讨论】:

  • 进行比较时,您确定使用的是相同的 TLS 协议版本和密码套件吗?
  • @AndrewHenle,是的,我使用了相同的密码套件和协议版本的 TLS。

标签: java ssl java-native-interface tls1.2


【解决方案1】:

我将尝试通过提供我的示例来回答您的第一个问题。我创建了一个 JMeter 测试来创建到 Java 应用程序的 TLS 连接。随着负载的增加,Java 应用程序在处理 TLS 握手方面面临着重大挑战,因为这对于 Java 来说似乎是一项非常昂贵的操作。我在同一硬件上运行了另一个测试,Nginx 负责终止 TLS 和代理 TCP 连接到 Java 应用程序。 Nginx(使用 OpenSSL)完全没有问题来处理相同的负载。

OpenSSL 肯定会使用硬件加速来进行加密处理。

下面这篇文章比较了不同JCE的性能和硬件加速的作用:https://developer.ibm.com/javasdk/2018/02/16/performance-ibm-jdk-security-ibmjceplus/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多